(其实不单单事务有编程式和声明式,定时任务也有哦…)
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表达式 */);
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_43613793/article/details/122987778
内容来源于网络,如有侵权,请联系作者删除!