这(显然)有效:
@Every("10s")
public class Extinguisher extends Job {
...
}
......但这不是:
@Every(Play.configuration.getProperty("my.setting", "10s"))
public class Extinguisher extends Job {
...
}
运行auto-test
时,应用程序无法启动并抱怨我的控制器因javassist遇到NullPointerException
而无法增强。
有没有办法从application.conf
配置作业计划?
答案 0 :(得分:4)
您可以从@OnApplicationStartup
作业手动安排作业:
@OnApplicationStartup
public class ExtinguisherBootstrap extends Job {
public void doJob() {
new Extinguisher()
.every(Play.configuration.getProperty("my.setting", "10s"));
}
}
答案 1 :(得分:3)
我不知道Play或javassist是否扩展了你可以用Java语言做的事情,但我至少可以指出以下行不是合法的Java:
@Every(Play.configuration.getProperty("my.setting", "10s"))
对于参数类型为 T 且值为 V 的注释,Java Language Specification要求:
如果 T 是基本类型或
String
,则 V 是常量表达式
在这种情况下, T (注释参数的类型)是String
,但是您尝试设置的值不是(编译时) )常数表达。
答案 2 :(得分:2)
问题是“配置”在那个阶段不可用。
我不认为你想做什么是可能的(根据我目前对Play的了解,也许有人知道让它发挥作用的技巧)
您可以通过每隔几秒钟运行一次作业来“破解它”,并在该作业中按照配置启动目标作业。效率较低,但它可以解决您的问题
答案 3 :(得分:2)
您可以这样做:
@On("cron.noon")
在application.conf中会找到这样的一行:
cron.noon = 1s