Spring 注解 @Scheduled(cron = "0 0/10 * * * ? ") 任务调度动态改变时间

Posted 如若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 注解 @Scheduled(cron = "0 0/10 * * * ? ") 任务调度动态改变时间相关的知识,希望对你有一定的参考价值。

不需要重启应用就可以动态的改变Cron表达式的值

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

@Lazy(false)
@Component
@EnableScheduling
public class DynamicScheduledTask implements SchedulingConfigurer {
    
    /**
     *  通过自动注入启动任务调度
     *  
     *  @Autowired
     *  DynamicScheduledTask dynamicScheduledTask;
     *  
     */

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    private static final String DEFAULT_CRON = "0 0/10 * * * ? ";
    private String cron = DEFAULT_CRON;
    
    /**
     * 获取任务执行规则
     * @return
     */
    public String getCron() {
        return cron;
    }

    /**
     * 设置任务执行规则
     * @param cron
     */
    public void setCron(String cron) {
        this.cron = cron;
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                // 任务逻辑
                logger.debug("dynamicCronTask is running...");
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 任务触发,可修改任务的执行周期
                CronTrigger trigger = new CronTrigger(cron);
                Date nextExec = trigger.nextExecutionTime(triggerContext);
                return nextExec;
            }
        });
    }
}

 

以上是关于Spring 注解 @Scheduled(cron = "0 0/10 * * * ? ") 任务调度动态改变时间的主要内容,如果未能解决你的问题,请参考以下文章

Spring 注解 @Scheduled(cron = "0 0/10 * * * ? ") 动态改变时间

Spring 注解 @Scheduled(cron = "0 0/10 * * * ? ") 任务调度动态改变时间

spring boot @Scheduled未生效原因以及相关坑

Spring @Scheduled定时任务动态修改cron参数

spring boot @Scheduled未生效原因

@Scheduled注解cron的规则表达式