Scala 禁用play.jobs.Job在play framework的测试模式下运行
在scala中使用play framework 1.2.4。 我几乎没有像这样的工作Scala 禁用play.jobs.Job在play framework的测试模式下运行,scala,playframework,Scala,Playframework,在scala中使用play framework 1.2.4。 我几乎没有像这样的工作 @OnApplicationStart class MyOtherJob extends Job { ... } @Every("30s") class MyJob extends Job { ... } 这些作业在应用程序处于测试模式时运行,因此 把事情搞砸。 如何在测试时禁用它们的运行 我尝试了以下应用程序配置,但没有帮助: # Jobs executor # ~~~~~~ # Size
@OnApplicationStart class MyOtherJob extends Job { ... }
@Every("30s") class MyJob extends Job { ... }
这些作业在应用程序处于测试模式时运行,因此
把事情搞砸。
如何在测试时禁用它们的运行
我尝试了以下应用程序配置,但没有帮助:
# Jobs executor
# ~~~~~~
# Size of the Jobs pool
play.jobs.pool=10
test.play.jobs.pool=0
test.cron.queue.every=never
dev.cron.queue.every=20s
prod.cron.queue.every=20s
test.cron.onApplicationStart.trigger=never
dev.cron.onApplicationStart.trigger=auto
prod.cron.onApplicationStart.trigger=auto
可以使用以下语法检查Play是否在测试模式下运行
play.Play.runingInTestMode()
注意:拼写错误并非偶然。这是API中的方法名称
因此,在作业中,您应该能够使用上述命令将作业执行包装在IF语句周围,从而阻止测试模式作业。EDIT:Ugh,我的格式设置已关闭。我一会儿就修好 我们有一个很好的小包装器,用于检查作业是否在特定环境中启用
if (clazz.isAnnotationPresent(Every.class)) {
try {
Job job = (Job) clazz.newInstance();
scheduledJobs.add(job);
String value = job.getClass().getAnnotation(Every.class).value();
if (value.startsWith("cron.")) {
value = Play.configuration.getProperty(value);
}
value = Expression.evaluate(value, value).toString();
if(!"never".equalsIgnoreCase(value)){
executor.scheduleWithFixedDelay(job, Time.parseDuration(value), Time.parseDuration(value), TimeUnit.SECONDS);
}
application.conf中的示例条目
job.myjob.enabled=true
%test.job.myjob.enabled=false
%prod.job.myjob.enabled=true
等等
def-ifEnabled(属性:字符串)(可运行:=>Unit)=
play.conf.configuration.getProperty(属性+“.enabled”,“false”)匹配{
大小写“true”=>可运行
案例=>记录器信息“忽略”+属性+“因为它已禁用!”
}
那你的工作呢
类MyJob扩展了作业{
如果启用(“job.myJob”){
//代码在这里
}
}
这样,您就不必检查每个单独的环境
if (clazz.isAnnotationPresent(Every.class)) {
try {
Job job = (Job) clazz.newInstance();
scheduledJobs.add(job);
String value = job.getClass().getAnnotation(Every.class).value();
if (value.startsWith("cron.")) {
value = Play.configuration.getProperty(value);
}
value = Expression.evaluate(value, value).toString();
if(!"never".equalsIgnoreCase(value)){
executor.scheduleWithFixedDelay(job, Time.parseDuration(value), Time.parseDuration(value), TimeUnit.SECONDS);
}
所以您应该定义cron.myjob=3min%test.cron.myjob=never和on(“cron.myjob”)
例:
谢谢,那正是我想要的!我同意。可能有,但我不知道。这是一个非常简单的解决方法。有没有办法知道我们是否在dev/prod中?
play.play.Mode.isDev()
和play.play.Mode.isProd()
为亡灵巫术道歉,@Codemwnci。哪一个更好:您的建议,还是Play.configuration.get()
?我认为你的更好,因为它更干净。试着在google组中询问或提交一个bug,test.cron.onApplicationStart.trigger=永远不应该工作,为它创建一个记录单