2011-12-23 8 views
4

再生フレームワーク1.2.4をスカラで使用する。 は、私は、アプリケーションがテストモードである間、これらのジョブが実行されているので、彼らは 台無しに物事を再生フレームワークのテストモードでplay.jobs.Jobを無効にする

@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 
+0

はグーグルに尋ねてみてくださいグループhttps://groups.google.com/group/play-frameworkまたはバグhttps://play.lighthouseapp.com/projects/57987/overview、test.cron.onApplicationStart.trigger =は動作しないでくださいそれのチケット – opensas

答えて

4

をプレイには、次の構文を使用して、テストモードで実行されているかどうかを確認することが可能です。

play.Play.runingInTestMode() 

注:スペルの間違いは偶然ではありません。これがAPIのメソッド名です。

したがって、あなたのジョブでは、上記を使用してIFステートメントの周りでジョブの実行をラップすることができ、テストモードジョブを防ぐことができます。

+0

ありがとう、それは私が探していたものです! –

+0

そのための設定があったらそれはよかったでしょう... –

+0

私は同意します。あるかもしれないが、私はそれを認識していない。これは簡単な回避策です。 – Codemwnci

0

EDIT:うわー、私の書式設定はオフです。少し修正します。

私たちは、ジョブが特定の環境で有効になっているかどうかを確認する素晴らしいラッパーを用意しています。 application.conf

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

などで

例エントリ。あなたの仕事

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

あなたは、個々の環境を確認する必要はありません。この方法で、その後

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!" }

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 = 3分%test.cron.myjob =決してと( "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 { 
関連する問題