У меня есть приложение 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?
Как я могу изменить значение, чтобы сделать бесконечно?
Я плохо знаком с Граалем и кварцем, поэтому понятия не имею, что происходит.