Проблема с плагином Quartz Grail - PullRequest
0 голосов
/ 03 мая 2018

У меня есть приложение Grails и на нем запущена кварцевая работа. Работа содержит код ниже, аналогичный приведенному ниже.

class MyJob{

  static triggers = {}

  def printLog(msg){
    String threadId = Thread.currentThread().getId()
    String threadName = Thread.currentThread().getName()
    log.info(threadId+" - "+threadName+" : "+msg)
  }

   def execute(context)
    {
       printLog("Before Sync");

       synchronized(MyJob){
         printLog("Inside Sync");
         try{
            printLog("Before sleep 20 minutes")
            Thread.sleep(1200000)
            printLog("After sleep")
          }catch (Exception e){
            log.error("Error while sleeping")
          }
       }
       printLog("After Sync")

    }
  }

Я запланировал запуск каждой минуты

Я вижу в журналах, что один поток получает синхронизированный блок, а затем другие задания начинают накапливаться, ожидая завершения потока, это работает, как и ожидалось.

Проблема здесь в том, что задания прекращаются через 10 минут к тому времени, когда было создано 10 потоков. Из них один спит 20 минут, а остальные 9 ждут, когда 1-й поток освободит блокировку. Почему не создаются новые рабочие места?

Я видел в некоторых ответах, что я могу решить проблему, изменив мой раздел триггеров, как показано ниже

static triggers = {
  simple repeatInterval: 100
}

Я попробовал вышеуказанный вариант, и он по-прежнему показывает только 10 заданий.

Откуда берется конфигурация по умолчанию 10? Как я могу изменить значение, чтобы сделать бесконечно?

Я плохо знаком с Граалем и кварцем, поэтому понятия не имею, что происходит.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я думаю, что плагин Grails устанавливает значение threadCount равным 10 в файле quartz.properties в комплекте, при условии, что вы используете Grails 3, который вы можете переопределить в application.yml следующим образом:

quartz:
  threadPool:
    threadCount: 25

Grails 2 - аппликация. Гроовой

quartz {
  props {
    threadPool.threadCount = 100
  }
}
0 голосов
/ 03 мая 2018

В общем случае не рекомендуется блокировать поток заданий с помощью снов

Если у вас есть задание, выполняющее длительный процесс, вы должны разделить его на несколько заданий, чтобы освободить поток как можно скорее

...