spring boot 定时任务

本文介绍如何使用Spring框架配置定时任务,并演示了三种不同的定时任务类型:基于Cron表达式的定时任务、固定间隔时间任务及固定等待时间任务。此外,还详细展示了如何实现定时任务的动态修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Configuration
public class TimedTask {
    public final static long SECOND = 1 * 1000;
    SimpleDateFormat DATEFORMRT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * Corn表达式 @Scheduled(cron = Corn表达式)每1秒执行一次
     */
    @Scheduled(cron = "0/20 * * * * ?") 
    public void scheduler() {
        System.out.println("TimedTask.scheduler()");
    }

    /**
     * 固定间隔时间 @Scheduled(fixedRate = 时间间隔 , 单位毫秒)
     */
    @Scheduled(fixedRate = SECOND * 4)
    public void fixedRateJob() {
        System.out.println("[FixedRateJob Execute]" + DATEFORMRT.format(new Date()));
    }

    /**
     * 固定等待时间 @Scheduled(fixedDelay = 时间间隔, 单位毫秒 )
     * @throws InterruptedException
     */
    @Scheduled(fixedDelay = SECOND * 2)
    public void fixedDelayJob() throws InterruptedException {
        TimeUnit.SECONDS.sleep(2);
        System.out.println("[FixedDelayJob Execute]" + DATEFORMRT.format(new Date()));
    }

}

动态修改定时任务cron参数

@Component
public class DynamicScheduledTask implements SchedulingConfigurer {

    private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("HH:mm:ss");

    private static String DEFAULT_CRON = "0/5 * * * * ?";

    private static String TEMP_CRON = DEFAULT_CRON;

    private String cron = DEFAULT_CRON;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(new Runnable() {
            public void run() {

                if(!cron.equals(TEMP_CRON)){
                    //避免程序再次执行之前设置的时间点定时任务
                    //假如:原来为5秒执行一次。修改为每10秒一次后,程序还会自动执行一次5秒一次的任务才能切到10秒一次
                    return;
                }
                System.out.println("当前cron --->" + cron);
                // 定时任务的业务逻辑
                System.out.println("当前时间:" + DATEFORMAT.format(new Date()));

            }
        }, new Trigger() {

            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 定时任务触发,可修改定时任务的执行周期

                CronTrigger trigger = new CronTrigger(cron);
                Date nextExecDate = trigger.nextExecutionTime(triggerContext);
                TEMP_CRON = cron;
                return nextExecDate;
            }
        });

    }

    /**
     * 修改cron表达式
     * @param cron
     */
    public void setCron(String cron) {
        this.cron = cron;
    }
}

参考:http://www.jb51.net/article/108326.htmhttp://blog.youkuaiyun.com/je_ge/article/details/53434321

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值