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執行處理。
待續...