spring中定时任务汇总
1.直接使用注解@Scheduled
@Slf4j
@Component
@EnableAsync
@EnableScheduling
public class HelloScheduled {
/**
* 1、在Spring中表达式是6位组成,不允许第七位的年份
* 2、在周几的的位置,1-7代表周一到周日
* 3、定时任务不该阻塞。默认是阻塞的
* 1)、可以让业务以异步的方式,自己提交到线程池
* CompletableFuture.runAsync(() -> {
* },execute);
*
* 2)、支持定时任务线程池;设置 TaskSchedulingProperties
* spring.task.scheduling.pool.size: 5
*
* 3)、让定时任务异步执行
* 异步任务
*
* 解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能
*
*/
@Async
@Scheduled(cron = "*/1 * * * * ?")
public void hello() {
log.info("hello...");
try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
}
}
2.ThreadPoolTaskScheduler
public class ThreadPoolTaskDemo {
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> scheduledFuture;
@Value("*/5 * * * * ?")
private String crontime;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
@PostConstruct
public void start(){
scheduledFuture = threadPoolTaskScheduler.schedule(new Runnable() {
@Override
public void run() {
log.info("定时任务开始*********");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
//CronTrigger动态设置下次执行时间
return new CronTrigger(crontime).nextExecutionTime(triggerContext);
}
});
}
public void stopcron(){
if(scheduledFuture != null) {
scheduledFuture.cancel(true);
scheduledFuture = null;
}
}
}
第一步:实例化ThreadPoolTaskScheduler对象
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> scheduledFuture;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
第二步:执行任务调度
scheduledFuture = threadPoolTaskScheduler.schedule(new Runnable() {
@Override
public void run() {
// 逻辑处理...
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
//CronTrigger动态设置下次执行时间
return new CronTrigger("crontime").nextExecutionTime(triggerContext);
}
});
第三步:关闭任务调度
if (scheduledFuture != null) {
scheduledFuture.cancel(true);
scheduledFuture = null;
}
3.xxl job
gitee上地址:
大体的流程是 1.执行SQL创建对应库 2.启动服务端 3.启动客户端
gitee上文档写到很详细了