Scheduling @Component这两个注解要记得加,我的@EnableScheduling加载启动类了,定时任务类就不用加了
实现SchedulingConfigurer 类,重写configureTasks方法,里面有个添加触发器任务addTriggerTask,这个的源码
他就是需要一个Runnable启动一个线程,执行目标任务,一个Trigger触发器,设置定时时间。
因为cron的表达式是这样的:@Scheduled(cron = "0/1 * * * * ?")
所以要转换一下。因为spring-boot这个cron表示式没有年份,所以没有yyyy
Date->String(cron)
public class CronUtils {
private static final SimpleDateFormat sdf = new SimpleDateFormat("ss mm HH dd MM ?");
/***
* 功能描述:日期转换cron表达式
* @param date
* @return
*/
public static String getCron(Date date) {
String formatTimeStr = null;
if (Objects.nonNull(date)) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}
}
定时任务
@Component
class TestTask implements SchedulingConfigurer {
Runnable runnable = new Runnable() {
@Override
public void run() {
// 定时任务要执行的内容
System.out.println("【开始执行定时任务。。。bbbbbbbbb】");
}
};
Trigger trigger = new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// String cron = "0/1 * * * * ?"; //可以将表达式配置在数据库中
String cron = CronUtils.getCron(new Date(1607222391000l));
System.out.println("cron:"+cron);
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
};
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(runnable, trigger);
}
}
结果:
【开始执行定时任务。。。bbbbbbbbb】 cron:51 39 10 06 12 ?