#该注解用来修饰非静态void方法,被修饰的方法会在服务器加载servlet时自动执行,并且只会执行一次
@PostConstruct
#根据bean的别名注入,可作用在属性、方法形参上
@Qualifier
#该注解用来修饰一个需要定时执行的方法,需要在启动类加上 @EnableScheduling 来启用该注解
@Scheduled
注:默认是由单线程执行所有定时方法,扩展为多线程方式:
@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("my-test-");
threadPoolTaskScheduler.initialize();
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
#该注解可以将方法返回的对象加载进spring容器中, bean实例的别名默认为方法名称(首字母小写), 也可以自定义 @Bean("别名")
@Bean
#该注解常常用来声明一个配置类,通常与 @Bean 连用,配置类本身同样会加载进spring容器中
@Configuration
#该注解用来修饰一个需要异步执行的方法,需要在启动类加上 @EnableAsync 来启用该注解;该注解默认使用spring容器创建的ThreadPoolTaskExecutor, 核心线程数为8, 最大线程数为整数最大值, 非核心线程保持活跃时长为60s, 阻塞队列为LinkedBlockingQueue, 队列容量为整数最大值, 拒绝策略为AbortPolicy
@Async
- 方式一: 在spring配置文件中配置相关参数
spring:
task:
execution:
pool:
core-size: 6
max-size: 20
keep-alive: 10s
queue-capacity: 1024
thread-name-prefix: prefix-name
- 方式二: 使用自定义的ThreadPoolTaskExecutor
@Configuration
public class TaskExecutorConfig{
@Bean
public Executor taskExecutor(){
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setThreadNamePrefix("prefix-name");
taskExecutor.setCorePoolSize(6);
taskExecutor.setMaxPoolSize(200);
taskExecutor.setKeepAliveSeconds(10);
taskExecutor.setQueueCapacity(1024);
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
return taskExecutor;
}
}
//使用自定义的ThreadPoolTaskExecutor @Async("taskExecutor")
#该注解用于修饰属性,其作用是将application.properties中对应的值赋给被修饰的属性
@Value("${}")
#该注解用来声明一个配置类,其作用是将application.properties中对应的值赋给该类的属性
@ConfigurationProperties(prefix = "")
#生成一个无参构造器
@NoArgsConstructor
#生成一个全参构造器
@AllArgsConstructor
#采用Builder的方式构建对象,该注解会隐含的创建一个全参实例构造器
@Builder
#提供set、get、toString、equels、hashCode方法
@Data
#根据注解的属性值来动态地决定Bean的加载; name 代表配置文件中的key,当 key 对应的值 = havingValue的值时,代表Bean可以被加载;matchIfMissing = true 代表当配置文件中不存在 对应的key时,Bean也可以被加载,matchIfMissing = false 代表当配置文件中不存在 对应的key时,Bean不可以被加载
@ConditionalOnProperty(name = "mybean.enabled", havingValue = "1", matchIfMissing = true)