在play框架中的测试模式下禁用play.jobs.Job

时间:2011-12-23 17:41:14

标签: scala playframework

将play框架1.2.4与scala结合使用。 我几乎没有看起来像

的游戏工作
@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 

3 个答案:

答案 0 :(得分:4)

可以使用以下语法检查Play是否在测试模式下运行。

play.Play.runingInTestMode()

注意:拼写错误不是偶然的。这是API中的方法名称。

因此,在您的作业中,您应该能够使用上述内容围绕IF语句包装作业执行,从而阻止测试模式作业。

答案 1 :(得分:0)

编辑:呃,我的格式化了。稍微修复一下。

我们有一个很好的小包装器,用于检查是否在特定环境中启用了作业。

application.conf中的示例条目

job.myjob.enabled=true %test.job.myjob.enabled=false %prod.job.myjob.enabled=true

等等。

def ifEnabled(property: String)(runnable: => Unit) = play.conf.configuration.getProperty(property + ".enabled", "false") match { case "true" => runnable case _ => Logger info "Ignoring " + property + " since it's disabled!" }

然后在你的工作中

class MyJob extends Job { ifEnabled("job.myJob") { // code goes here } }

这样您就不必检查每个环境。

答案 2 :(得分:0)

 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 and on(" cron.myjob")

例如:

cron.SyncWeixinInfo=never
%prod.cron.SyncWeixinInfo=0 0 0 1 * ?
%test.cron.SyncWeixinInfo=0 0 0 1 * ?
%localtest.cron.SyncWeixinInfo=0 0 0 1 * ?
%prodSlave.cron.SyncWeixinInfo=never


@On("cron.SyncWeixinInfo")//每月1号凌晨0点
public class SyncWeixinInfo extends Job {