springboot 定时任务
1.静态实现
@Component
@EnableScheduling
public class SchedualerTasks {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final DateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Autowired
private Service Service;
@Scheduled(cron = "0/15 * * * * *")
public void taskConfigurer() {
System.out.println("=====================>定时任务<=====================");
service.doWork();
logger.info("cron定时任务: " + "时间:【{}】", DATA_FORMAT.format(Calendar.getInstance().getTime()));
}
}
2.配置文件配置定时任务时间
@Component
@EnableScheduling
public class SchedualerTasks implements SchedulingConfigurer {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final DateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Value("${server.scheduler.cron}")
private String cron;
@Autowired
private Service Service;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(() -> {
System.out.println("=====================>定时任务<=====================");
service.doWork();
logger.info("动态定时任务: " + "时间:【{}】", DATA_FORMAT.format(Calendar.getInstance().getTime()));
}, triggerContext -> {
CronTrigger trigger = new CronTrigger(cron);
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
});
}
}
配置文件application.properties
server.scheduler.cron=0 0 * * * *
3. 动态设置任务启动、结束、更改调度时间
DynamicTasks .class
@Component
public class DynamicTasks {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final DateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
return new ThreadPoolTaskScheduler();
}
@Autowired
private ThreadPoolTaskScheduler taskScheduler;
private ScheduledFuture<?> future;
public void startTask(String cron) {
logger.info("定时任务启动...");
future = taskScheduler.schedule(new MyTask(), new CronTrigger(cron));
}
public void stopTask() {
logger.info("定时任务关闭...");
if (future != null) {
future.cancel(true);
}
}
public void changeTaskTime(String newCron) {
logger.info("定时任务调度时间改变...");
stopTask();
startTask(newCron);
}
private class MyTask implements Runnable {
@Override
public void run() {
System.out.println("********************>>>定时任务<<<********************");
logger.info("cron定时任务: " + "时间:【{}】", DATA_FORMAT.format(Calendar.getInstance().getTime()));
}
}
}
controller.class
@RestController
public class SchedualerController {
@Autowired
private DynamicTasks dynamicTasks;
@GetMapping("/startTask")
public void startMyTask(@RequestParam("cron") String cron) {
dynamicTasks.startTask(cron);
}
@GetMapping("/stopMyTask")
public void stopMyTask() {
dynamicTasks.stopTask();
}
@GetMapping("/changeMyTaskTime")
public void changeMyTaskTime(@RequestParam("newCron") String newCron) {
dynamicTasks.changeTaskTime(newCron);
}
}