Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 禁用play.jobs.Job在play framework的测试模式下运行_Scala_Playframework - Fatal编程技术网

Scala 禁用play.jobs.Job在play framework的测试模式下运行

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

在scala中使用play framework 1.2.4。 我几乎没有像这样的工作

@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=永远不应该工作,为它创建一个记录单