在 java spring @Scheduled 中动态设置不同的 cron 参数
setting different cron params dynamically in java spring @Scheduled
如何在此处设置我自己的变量 - "${cron.expression}"?
此参数需要最终常量。我想在程序运行时动态更改值。例如,我需要在执行此元素时设置 LocalDate
。
请写一个例子,我是怎么做到的。
@Service
public class ScheduledService {
@Scheduled(cron = "${cron.expression}")
public void demoServiceMethod() {
//do something
}
}
不能动态设置注解参数。您可以通过编程方式完成,如下所示。
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
}
}
我是这样解决这个问题的:
我将使用@Scheduled 从数据库中检查日期。
如果今天——我需要的日期——做点什么……就像那样:
@Scheduled(fixedRate = 86_400_000)// One day
public void demoServiceMethod() {
if(Localdate.now().isEqual(//date that I need)){
//do something
}
//do something everyday
}
如何在此处设置我自己的变量 - "${cron.expression}"?
此参数需要最终常量。我想在程序运行时动态更改值。例如,我需要在执行此元素时设置 LocalDate
。
请写一个例子,我是怎么做到的。
@Service
public class ScheduledService {
@Scheduled(cron = "${cron.expression}")
public void demoServiceMethod() {
//do something
}
}
不能动态设置注解参数。您可以通过编程方式完成,如下所示。
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
}
}
我是这样解决这个问题的: 我将使用@Scheduled 从数据库中检查日期。 如果今天——我需要的日期——做点什么……就像那样:
@Scheduled(fixedRate = 86_400_000)// One day
public void demoServiceMethod() {
if(Localdate.now().isEqual(//date that I need)){
//do something
}
//do something everyday
}