2011-12-23 28 views
4

在scala中使用play framework 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

編輯:呃,我的格式是關閉的。稍微修復一下。

我們有一個很好的小封裝,用於檢查某個作業是否在特定環境中啓用。

實施例條目中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 } }

這樣你就不必檢查每個單獨的環境。

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 { 
相關問題