注册bean
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(1);
return taskScheduler;
}
定时任务
@Configuration
@EnableScheduling
@Slf4j
public class TestSchedule implements SchedulingConfigurer {
private ScheduledTaskRegistrar taskRegistrar;
private TaskScheduler taskScheduler;
private ScheduledFuture<?> scheduledFuture;
@Autowired
public TestSchedule(TaskScheduler taskScheduler) {
this.taskScheduler = taskScheduler;
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> System.out.println("执行定时任务1: " + LocalDateTime.now().toLocalTime()),
//2.设置执行周期(Trigger)
triggerContext -> {
//2.3 返回执行周期(Date)
return new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext);
}
);
this.taskRegistrar = taskRegistrar;
}
public void updateCronExpression(String newCron) {
if (scheduledFuture != null) {
scheduledFuture.cancel(false);
}
taskRegistrar.destroy();
// 添加新的定时任务
scheduledFuture = taskScheduler.schedule(() -> System.out.println("执行定时任务2----: " + LocalDateTime.now().toLocalTime()), new CronTrigger(newCron));
}
}
controller层更改cron
@RestController
public class TestCronController {
@Autowired
private TestSchedule testSchedule;
@PostMapping("/updateCronExpression")
public String updateCronExpression(@RequestParam String newCron) {
testSchedule.updateCronExpression(newCron);
return "更新cron表达式成功";
}
}