Spring offers zone
注释的@Scheduled
属性。我希望以编程方式为@Scheduled
方法提供时区。
例如,假设我想在洛杉矶和芝加哥的建筑物上打开灯,两者都是在当地时间午夜。我想从我的存储库中获取建筑物。
时区可以在运行时提供还是以其他方式注入?
像:
@Scheduled(cron = "0 0 * * * *", zone = {THE_ZONE}) //midnight
public void myScheduledMethod() {
//...
building.toggleLights(); //could be LA or Chicago
}
我知道@Scheduled
方法不能接受任何参数,因此提供时区不会这样做。
答案 0 :(得分:0)
只需使用值表达式。
@Scheduled(cron = "0 0 * * * *", zone = "${zone.property}") //midnight
public void myScheduledMethod() { ... }
这将使用Environment
查找名为zone.property
的属性,该属性可以设置为环境变量,从属性文件中读取等。
如果要从db中检索它们,则必须手动调度方法而不使用@Schedule
方法。创建一个bean,在启动时从数据库中读取并使用TaskScheduler
注册任务。