记录一下开发过程中遇到的问题,仅供参考;
正常我们再方法上直接加@Scheduled(cron = “0 */10 * * * ?”)这样的注释的话,同一时间触发的话需要等第一个方法执行完才回去执行下一个方法;我的需求是大概意思是某一个方法需要执行时间较长,我想要他执行期间别的定时器可以正常执行;先上代码:首先需要在 定时器类上加上@EnableAsync注解,方法上加上@Async注解,最后启动类上也需要加上@EnableAsync注解;@EnableAsync注解是开启异步支持;@Async标识该方法异步执行;
@Configuration
@EnableScheduling
@Slf4j
@EnableAsync
public class RuntimeTask {
@Scheduled(cron = "0 10 * * * ?")
@Async("taskRuntimeScheduler")
public void gcTasks(){
//具体定时业务代码
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("gcTasks");
}
}
@Scheduled(cron = "0 10 * * * ?")
@Async("taskRuntimeScheduler")
public void gcTask() {
log.info("gcTask");
}
}
配置类:
@Configuration
@EnableAsync
public class ScheduleConfig {
@Bean
public TaskScheduler taskRuntimeScheduler(){
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);//设置最大线程数
taskScheduler.initialize();
return taskScheduler;
}
}
这样的话第一个定时器任务和第二个会同时触发。好了,大致就这样吧,反正我这样能行,原理啥的目前还不太懂,小白一个;



