Играть: Использование свойства конфигурации в качестве значения аннотации - PullRequest
3 голосов
/ 20 октября 2011

Это (очевидно) работает:

@Every("10s")
public class Extinguisher extends Job {
    ...
}

... но это не так:

@Every(Play.configuration.getProperty("my.setting", "10s"))
public class Extinguisher extends Job {
    ...
}

При запуске auto-test приложение не запускается и жалуется, что мои контроллеры не могут быть улучшены из-за NullPointerException, с которым столкнулся javassist.

Есть ли способ настроить планирование заданий из application.conf?

Ответы [ 4 ]

4 голосов
/ 20 октября 2011

Вы можете запланировать свою работу вручную из @OnApplicationStartup job:

@OnApplicationStartup
public class ExtinguisherBootstrap extends Job { 
    public void doJob() {
        new Extinguisher()
            .every(Play.configuration.getProperty("my.setting", "10s"));
    }
}
3 голосов
/ 20 октября 2011

Я не знаю, расширяют ли Play или javassist то, что вы можете делать с языком Java, но я могу, по крайней мере, указать, что следующая строка не является допустимой Java:

@Every(Play.configuration.getProperty("my.setting", "10s"))

Для аннотации с параметром типа T и значением V , Спецификация языка Java требует, чтобы:

Если T является примитивным типом или String, V является константным выражением

В этом случае T , тип параметра аннотации, является String, но значение, которое вы пытаетесь установить, не является константным выражением (во время компиляции) .

2 голосов
/ 22 декабря 2011

Вы можете сделать что-то вроде этого:

@On("cron.noon")

Который будет искать такую ​​строку в application.conf:

cron.noon = 1s
2 голосов
/ 20 октября 2011

Проблема в том, что «конфигурация» не будет доступна на этом этапе.

Я не думаю, что то, что вы хотите сделать, возможно (согласно моим текущим знаниям Play, возможно, кто-то знает хитрость, чтобы заставить его работать)

Возможно, вы сможете взломатьЭто ", если задание запускается каждые несколько секунд, и в этом задании запускается целевое задание в соответствии с конфигурацией.Это менее эффективно, но может решить вашу проблему

...