核心
代码语言:javascript复制简单两步
@EnableScheduling // 在springboot入口程序中添加,开启定时任务服务
@Scheduled(cron = "0/8 * * * * ? ") // 定时任务上添加,设置定时任务计划
这样springboot就会接管定时任务自动按计划执行,不需要手动写调用方式
注意点
- 定时job默认是单线程的,所以多个定时scheduler的时候,互相会产生干扰导致执行时机不可控
- 可以使用@Async来开启异步, 就可以多线程执行定时scheduler了, 每个任务启动的执行线程都不一样
- 如下是测试源代码以及验证线程问题
源代码
代码语言:javascript复制package com.starry.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@Service
public class MyTaskScheduleService {
@Scheduled(cron = "0/5 * * * * ? ")
public void PrintfHelloJob() {
System.out.println("同步Hello,当前时间" LocalDate.now() "线程名" Thread.currentThread().getName() ",hello!!");
}
@Scheduled(cron = "0/8 * * * * ? ")
public void PrintfTestJob() {
System.out.println("同步test,当前时间" LocalDate.now() "线程名" Thread.currentThread().getName() ",Test!!");
}
/**
* 多线程执行定时任务,否则下一次执行会被上次执行情况干扰
*/
@Async
@Scheduled(cron = "0/10 * * * * ? ")
public void AsyncPrintfHelloJob() {
System.out.println("异步JOB,当前时间" LocalDate.now() "线程名" Thread.currentThread().getName() ",hello!!");
}
}
版权属于:dingzhenhua
本文链接:https://cloud.tencent.com/developer/article/2019326
转载时须注明出处及本声明