Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Groovy & Grails > job в один поток


Автор: igilfanov 28.3.2013, 12:48
Использую http://grails.org/plugin/quartz. Как правильно задать параметры для static triggers класса job, чтобы планировщик создавал 1 поток, последовательно выполняя задачу через n количество времени ? 

попытки:

Код

package ree16

class ReestrLoaderJob {

    static triggers = {
      simple startDelay:30000, repeatInterval: 150000      
    }

    def reestrLoaderService
    
    def execute() {      
         reestrLoaderService.run()            
    }
}


у меня складывается такое ощущение, что данный планировщик создает параллельно несколько потоков.

можно ли проверить мою гипотезу?

Спасибо.

Автор: vogdb 4.4.2013, 16:49
@DisallowConcurrentExecution к объявлению класса job'а. При этом версия плагина должна быть >= 1.0-RC3

Автор: igilfanov 5.4.2013, 08:45
с аннотацией @DisallowConcurrentExecution не получилось, указывает на unable to resolve class DisallowConcurrentExecution, unable to find class for annotation.

Из документации http://grails-plugins.github.com/grails-quartz/guide/configuration.html : 

Configuring concurrent execution

By default Jobs are executed in concurrent fashion, so new Job execution can start even if previous execution of the same Job is still running. If you want to override this behavior you can use 'concurrent' property, in this case Quartz's StatefulJob will be used (you can find more info about it here):

Код

    def concurrent = false



Код


package ree16

class ReestrLoaderJob {

    def concurrent = false 

    static triggers = {
      simple startDelay:30000, repeatInterval: 150000      
    }
    def reestrLoaderService
    
    def execute() {      
         reestrLoaderService.run()            
    }
}




Автор: igilfanov 5.4.2013, 09:34
все же что-то конструкция 
Код
  def concurrent = false 
 особо не помогает, магически создаются 10 потоков.

vogdb, вы можете продемонстрировать полный пример класса Job с аннотацией @DisallowConcurrentExecution, может нужно унаследовать от какого-нибудь класса ?

версия плагина:  quartz:1.0-RC5

Автор: vogdb 8.4.2013, 22:49
Привет! Прошу прошения, что подсказал навскиду, не особо подумав и перепроверив документацию. Полагал, что они используют Job класс оригинальной библиотеки. Гляну сейчас исходники, что у них там.
Итак. Унаследовать не получится, потому что Job класс в grails никакой не Quartz Job класс. Это всего лишь обертка, на базе которого создается Spring Quartz Job класс, опять же не Quartz Job =). Так что как не наследуй, а браться будет из класса только то, что известно Reflection'у. Мой совет создать тестовый проект, наглядно демонстрирующий работы свойства concurrent. Проверить его на связке версий плагин 1.0-RC6, grails 2.2.0 и плагин 1.0-RC5, grails 2.1.0. Если работать не будет, то смело закидывать этот проект на github и писать issue к проекту плагина на том же github. Понимаю, что легко давать советы, но за те полчаса что у меня были, я не успел понять передается ли данное свойство в Spring Quartz Job.

Автор: igilfanov 9.4.2013, 09:34
создал тестовое grails 2.2.1 приложение, установил плагин quartz:1.0-RC6, вышеуказанный код теперь работает корректно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)