Grails Quartz grail插件的问题

Grails Quartz grail插件的问题,grails,quartz-scheduler,Grails,Quartz Scheduler,我有一个grails应用程序和一个运行在上面的quartz作业。作业包含以下类似于以下的代码 class MyJob{ static triggers = {} def printLog(msg){ String threadId = Thread.currentThread().getId() String threadName = Thread.currentThread().getName() log.info(threadId+" - "+thread

我有一个grails应用程序和一个运行在上面的quartz作业。作业包含以下类似于以下的代码

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个线程等待第一个线程释放锁。为什么没有创造新的就业机会

我在一些答案中看到,我可以通过修改触发器部分来解决这个问题,如下所示

static triggers = {
  simple repeatInterval: 100
}
我尝试了上面的选项,但仍然显示只有10个工作

从哪里取默认配置10? 如何修改该值以实现无限


我不熟悉grails和quartz,所以我不知道发生了什么。

一般来说,用sleeps锁定作业线程不是一个好主意


如果您有一个运行长进程的作业,则必须将其拆分为多个作业,以便尽快释放线程。一般来说,使用sleep锁定作业线程不是一个好主意


如果您有一个运行长进程的作业,则必须将其拆分为多个作业,以便尽快释放线程。我认为Grails插件在bundled quartz.properties文件中将threadCount设置为10,假设您使用的是Grails 3,则可以在application.yml中覆盖,如下所示:

quartz:
  threadPool:
    threadCount: 25
Grails2-application.groovy

quartz {
  props {
    threadPool.threadCount = 100
  }
}

我认为Grails插件在bundled quartz.properties文件中将threadCount设置为10,假设您使用的是Grails 3,您可以在application.yml中覆盖它,如下所示:

quartz:
  threadPool:
    threadCount: 25
Grails2-application.groovy

quartz {
  props {
    threadPool.threadCount = 100
  }
}

解释了如何使用触发器,我认为在版本3之前没有定义全局变量,您会将每个作业设置为有自己的触发器吗?不确定将每个作业配置为按照日期或repeate internal正确工作的实际问题是什么-除此之外,您尚未定义repeatInterval(可设置为-1以使其不确定)解释了如何使用触发器,我认为在版本3之前,没有定义全局变量,您会将每个作业设置为有自己的触发器吗?不确定将每个作业配置为按日期或repeate internal正确工作的问题实际上是什么-除此之外,您还没有定义repeatInterval,可以将其设置为-1以使其不确定如何在grails 2.X中执行?我没有application.groovy文件。但是有一个QuartzConfig.groovy文件包含以下内容quartz{autoStartup=true jdbcStore=false concurrent=false}我将在此处尝试该文件中似乎不支持threadCount属性,您可以将上述内容添加到Config.groovy中吗。谢谢,Mikehow我可以在Grails2.X中这样做吗?我没有application.groovy文件。但是有一个QuartzConfig.groovy文件包含以下内容quartz{autoStartup=true jdbcStore=false concurrent=false}我将在此处尝试该文件中似乎不支持threadCount属性,您可以将上述内容添加到Config.groovy中吗。谢谢你,迈克