SpringBoot啟動類常用注解


1. @SpringBootApplication

使用@AliasFor注解定義了4個參數,分別是"exclude","excludeName","basePackages","basePackagesClasses"

exclude指定不掃描的類,比如 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

excludeName直接指定不掃描的類名稱

basePackages指明掃描路徑

basePackagedClasses指明掃描的類

2. @EnableDiscoveryClient、@EnableEurekaClient

都用於注冊發現服務,但是@EnableEurekaClient只適合Eureka,而@EnableDiscoveryClient可以是其它注冊中心。從Spring Cloud Edgware開始,@EnableDiscoveryClient或@EnableEurekaClient可省略。只需加上相關依賴,並進行相應配置,即可將微服務注冊到服務發現組件上。

3. @EnableTransactionManagement

支持事務管理,只要在service上加@Transaction。

4. @EnableConfigurationProperties

@EnableConfigurationProperties注解的作用是,使使用 @ConfigurationProperties 注解的類生效。

5. @EnableAsync

@EnableAsync可以讓Spring啟用異步方法執行,就跟在xml中配置<task:*> 效果是一樣的。它可以跟@Configuration結合,讓整個Spring環境啟用基於注解的異步處理

默認情況下,Spring會查找一個關聯的線程池:要么是一個org.springframework.core.task.TaskExecutor類型的bean,要么是一個類型是 java.util.concurrent.Executor名字是taskExecutor的bean。如果這兩個都沒找到,Spring會使用org.springframework.core.task.SimpleAsyncTaskExecutor來執行異步方法,SimpleAsyncTaskExecutor實際上並不是線程池,它是為每一個新任務創建一個新的線程。此外,如果異步方法的返回值是void,那么調用過程中的異常信息是無法返回給調用者的,默認只是記錄日志。

ThreadPoolTaskExecutor並沒有被Spring容器管理,可以在getAsyncExecutor() 上添加@Bean注解讓它變成Spring管理的Bean。如果加入到Spring容器,那么就不需要手動調用executor.initialize() 做初始化了,因為在Bean初始化的時候會自動調用這個方法。

@Configuration
public class ThreadPoolConfig {

    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(300);
        threadPoolTaskExecutor.setMaxPoolSize(500);
        threadPoolTaskExecutor.setQueueCapacity(300);
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        threadPoolTaskExecutor.setThreadNamePrefix("order-thread-");
        return threadPoolTaskExecutor;
    }
}

這里是自定義線程池的范例,使用了CallerRunsPolicy拒絕策略,注意這種拒絕策略如果線程池滿,會將任務交給調度它的線程(比如主線程)去執行,存在將主線程搞崩的風險

6. @EnableScheduling

觀察它的源碼,發現它導入了SchedulingConfiguration類,而這個類會創建一個ScheduledAnnotationBeanPostProcessor,該processor中的processScheduled()方法會去處理加上了@Scheduled的方法。

 所以它的簡單使用方法是,編寫一個job類,在上面加上@Component注解,然后在方法上加上@Scheduled

7. @EnableFeignClients

OpenFeign的注解,相信很多人都用過,我們通過這個注解告訴框架掃描所有使用注解@FeignClient定義的feign客戶端。

它的源碼是這樣的:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({FeignClientsRegistrar.class})
public @interface EnableFeignClients {
    String[] value() default {};

    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<?>[] defaultConfiguration() default {};

    Class<?>[] clients() default {};
}

我們看到這里導入了一個FeignClientRegistrar類,這個類用來掃描@FeignClient注解修飾的接口並注冊到IoC容器。

 7. @EnableCaching

@EnableCaching注解是spring framework中的注解驅動的緩存管理功能。自spring版本3.1起加入了該注解。如果你使用了這個注解,那么你就不需要在XML文件中配置cache manager了。

當你在配置類(@Configuration)上使用@EnableCaching注解時,會觸發一個post processor,這會掃描每一個spring bean,查看是否已經存在注解對應的緩存。如果找到了,就會自動創建一個代理攔截方法調用,使用緩存的bean執行處理。

待續...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM