Плагин Grails Quartz не запоминает данные о состоянии между выполнением задания? - PullRequest
0 голосов
/ 12 марта 2019

Мне нужно сохранить значение счетчика между выполнением задания плагина Grails Quartz.Это выполняется с правильными временными интервалами, и я могу установить jobDataMap и правильно прочитать значение обратно (во время того же выполнения выполнения), но он отказывается запоминать его между выполнениями.

Я установил concurrent = falseкак советовали документы.Есть идеи?Мне просто нужно сохранить и увеличить счетчик.Я хочу избежать использования БД, если это вообще возможно, я думаю, что это должно просто использовать память?Или другие способы обхода?

My TestJob.groovy, в / server / grails-app / jobs:

package myPackage
class MyJob {
    static triggers = {
        simple repeatInterval: 5000l // execute job every 5 seconds
    }

    def concurrent = false // Don't run multiple simultaneous instances of this job

    def execute(context) {
        if(context.jobDetail.jobDataMap['recCounter'] == null) { context.jobDetail.jobDataMap['recCounter'] = 1 }
        else { context.jobDetail.jobDataMap['recCounter'] = context.jobDetail.jobDataMap['recCounter'] + 1 }

        println(context.jobDetail.jobDataMap['recCounter'])
}

Выход при запуске представляет собой новую строку с '1' каждые 5 секунд,Счетчик должен увеличиваться каждый раз.

1
1
1
1
etc..

Я использую Grails 3.3.9, а build.gradle имеет compile "org.grails.plugins:grails-spring-websocket:2.4.1" в зависимостях

Спасибо

1 Ответ

0 голосов
/ 12 марта 2019

Я никогда не использовал context объект в своих приложениях, но счетчик может быть реализован простым способом:

class MyJob {
    //some static stuff

    AtomicInteger counter = new AtomicInteger()

    def execute(context) {
        counter.incrementAndGet()    
        println counter.intValue()
    }
}
...