我如何以编程方式为@Scheduled添加时区?

时间:2017-06-21 04:27:20

标签: spring scheduled-tasks

Spring offers zone注释的@Scheduled属性。我希望以编程方式为@Scheduled方法提供时区。

例如,假设我想在洛杉矶和芝加哥的建筑物上打开灯,两者都是在当地时间午夜。我想从我的存储库中获取建筑物。

时区可以在运行时提供还是以其他方式注入?

像:

@Scheduled(cron = "0 0 * * * *", zone = {THE_ZONE}) //midnight
public void myScheduledMethod() {       
     //...      
     building.toggleLights();  //could be LA or Chicago
}

我知道@Scheduled方法不能接受任何参数,因此提供时区不会这样做。

1 个答案:

答案 0 :(得分:0)

只需使用值表达式。

@Scheduled(cron = "0 0 * * * *", zone = "${zone.property}") //midnight
public void myScheduledMethod() { ... }

这将使用Environment查找名为zone.property的属性,该属性可以设置为环境变量,从属性文件中读取等。

如果要从db中检索它们,则必须手动调度方法而不使用@Schedule方法。创建一个bean,在启动时从数据库中读取并使用TaskScheduler注册任务。