【问题标题】:setting different cron params dynamically in java spring @Scheduled在java spring @Scheduled中动态设置不同的cron参数
【发布时间】:2019-03-10 22:50:49
【问题描述】:

如何在此处设置我自己的变量 - "${cron.expression}" ?

此参数需要最终常量。我想在程序运行时动态更改值。例如,我需要在执行此元素时设置 LocalDate

请写一个例子,我该怎么做。

@Service
    public class ScheduledService {
        @Scheduled(cron = "${cron.expression}")
        public void demoServiceMethod() {
            //do something 
        }

    }

【问题讨论】:

  • 您不能使用@Scheduled 注释来执行此操作。您必须创建自己的 TaskExecutor
  • 这里是一个例子,希望对你有帮助baeldung.com/spring-task-scheduler
  • 我用这种方式解决了这个问题......我将使用@Scheduled 从数据库中检查日期。如果今天 - 我需要的日期 - 做点什么......

标签: java spring-mvc spring-boot scheduled-tasks spring-scheduled


【解决方案1】:

您不能动态设置注释参数。您可以通过编程方式完成,如下所示。

class Scheduler implements Runnable {
    public Scheduler(TaskScheduler scheduler, String timezone, String cron) {
        scheduler.schedule(this, new CronTrigger(cron, TimeZone.getTimeZone(timezone)));
    }

    @Override
    public void run() {
        //code goes here
    }
}

【讨论】:

    【解决方案2】:

    我用这种方式解决了这个问题: 我将使用@Scheduled 检查数据库中的日期。 如果今天 - 我需要的日期 - 做一些事情......就像那样:

    @Scheduled(fixedRate = 86_400_000)// One day
        public void demoServiceMethod() {
    if(Localdate.now().isEqual(//date that I need)){
    //do something
       }
            //do something everyday
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2021-11-13
      • 2015-04-04
      • 2018-04-01
      相关资源
      最近更新 更多