Отключение play.jobs.Job от запуска в тестовом режиме в игровой среде - PullRequest
4 голосов
/ 23 декабря 2011

Использование игрового фреймворка 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 ]

4 голосов
/ 23 декабря 2011

Можно проверить, работает ли Play в тестовом режиме, используя следующий синтаксис:

play.Play.runingInTestMode()

Примечание: орфографическая ошибка не является случайной.Это имя метода в API.

Следовательно, в ваших заданиях вы должны иметь возможность обернуть выполнение задания вокруг оператора IF, используя приведенное выше, и, следовательно, предотвратить задания в тестовом режиме.

0 голосов
/ 19 июля 2016
 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")

например:

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 {
0 голосов
/ 24 февраля 2012

РЕДАКТИРОВАТЬ: Тьфу, мое форматирование выключено. Исправлю немного.

У нас есть симпатичная оболочка, которая проверяет, разрешено ли задание в определенной среде.

Пример записи в 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 } }

Таким образом, вам не нужно проверять каждую отдельную среду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...