Spring 编程式定时任务

x33g5p2x  于2022-02-17 转载在 Spring  
字(0.9k)|赞(0)|评价(0)|浏览(356)

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

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

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

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

  1. @EnableScheduling
  2. public class MySchedule implements SchedulingConfigurer {
  3. private static String expression = "0 0/10 * * * ?";
  4. public static void setExpression(String expression) {
  5. MySchedule.expression = expression;
  6. }
  7. @Override
  8. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  9. taskRegistrar.addTriggerTask(
  10. new Runnable() {
  11. @Override
  12. public void run() {
  13. // 具体的定时任务
  14. }
  15. },
  16. new Trigger() {
  17. @Override
  18. public Date nextExecutionTime(TriggerContext triggerContext) {
  19. return new CronTrigger(expression).nextExecutionTime(triggerContext);
  20. }
  21. }
  22. );
  23. }
  24. }

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

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

相关文章