gpt4 book ai didi

Spring 编程式定时任务

转载 作者:知者 更新时间:2024-03-13 07:16:54 26 4
gpt4 key购买 nike

(其实不单单事务有编程式和声明式,定时任务也有哦…)

Spring 声明式定时任务大家都用的很频繁并且很熟练了吧,通过@EnableScheduling@Schedule(cron)注解即可实现。

虽然声明式定时任务配合上强大的cron表达式已经可以满足我们的大多数需求了,但是如果说在程序运行期间我们需要更改定时任务的执行频率,通过编程式@Schedule注解是不容易去实现的。

为此Spring为我们提供了一个接口SchedulingConfigurer可以让定时任务在运行时更改执行频率,我们只需要一个实现了该接口的类,通过重写configureTasks(ScheduledTaskRegistrar taskRegistrar)方法来实现定时任务运行频率的修改:

@EnableScheduling
public class MySchedule implements SchedulingConfigurer {

    private static String expression = "0 0/10 * * * ?";

    public static void setExpression(String expression) {
        MySchedule.expression = expression;
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(
                new Runnable() {
                    @Override
                    public void run() {
                        // 具体的定时任务
                    }
                },
                new Trigger() {
                    @Override
                    public Date nextExecutionTime(TriggerContext triggerContext) {
                        return new CronTrigger(expression).nextExecutionTime(triggerContext);
                    }
                }
        );
    }
}

如此便可以修改定时任务的执行频率,只需将该类的静态变量expression重新赋值即可:

MySchedule.setExpression("0 0/20 * * * ?" /* 新的cron表达式 */);

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com