• 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执行处理。

    待续...

  • 相关阅读:
    JVM-程序编译与代码晚期(运行期)优化
    JVM-程序编译与代码早期(编译期)优化
    JVM-字节码执行引擎
    JVM-类加载机制
    JVM-字节码指令
    JVM-class文件完全解析-属性表集合
    zabbix配置邮箱报警功能
    Linux Shell 返回值之 PIPESTATUS
    SSH远程登录原理
    Zabbix监控USG6300防火墙及交换机
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/16011319.html
Copyright © 2020-2023  润新知