@Slf4j
@Service
@Lazy(false)
public class MySchedule implements SchedulingConfigurer {

    /**
     * 这里可以结合配置中心使用
     */
    @Value("0/5 * * * * ?")
    private String expression;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(() -> {
            log.info("task run");
        }, (triggerContext) -> {
            CronTrigger trigger = new CronTrigger(expression);
            return trigger.nextExecutionTime(triggerContext);
        });
    }
}

这里有个问题需要记录一下,上面代码的实现原理,是通过上次任务执行的时候,为下次的任务执行设置时间,也就是说,如果上次任务已经执行过了,下次任务还没有执行,那么这里会等待下次任务执行的之后,才会把下下次任务执行的时间修改为你设置的时间。

更多推荐

springboot中 让Schedule 动态时间执行