grails - Quartz grail 插件的问题

标签 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+" - "+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")

    }
  }

我已安排它每分钟触发一次作业

我可以在日志中看到一个线程正在获取同步块(synchronized block),然后其他作业开始堆积,等待线程完成,这正在按预期工作。

这里的问题是作业在 10 分钟后停止,此时它已经创建了 10 个线程。其中一个线程休眠了 20 分钟,其他 9 个线程正在等待第一个线程释放锁。为什么没有创造新的就业机会?

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

static triggers = {
  simple repeatInterval: 100
}

我尝试了上述选项,但它仍然只显示 10 个职位。

从哪里获取默认配置 10 ? 我如何修改该值以无限执行?

我对 grails 和quartz 很陌生,所以我不知道发生了什么。

最佳答案

我认为 Grails 插件在捆绑的quartz.properties 文件中将 threadCount 设置为 10,假设您使用的是 Grails 3,您可以像这样在 application.yml 中覆盖:

quartz:
  threadPool:
    threadCount: 25

Grails 2 - application.groovy

quartz {
  props {
    threadPool.threadCount = 100
  }
}

关于grails - Quartz grail 插件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50150806/

相关文章:

database - 设计Grails中常量的最佳方法

eclipse - Grails-开发建议-在哪里可以找到插件API/对错误进行疑难解答/让自己的生活更轻松

java - 僵尸线程正在吞噬我的大脑(J2EE、Tomcat、Hibernate、Quartz)

c# - Quartz.Net 调度程序作为 Windows 服务运行

grails - 如何注入(inject)与 grails 中的任何域类无关的自定义服务?

mysql - Grails 应用程序(Hibernate、Tomcat、mysql)中空闲时间后没有数据库连接

debugging - 使用IntelliJ IDEA 12.1.4调试grails应用程序

quartz-scheduler - 集群环境中的 Quartz 调度器

quartz-scheduler - Quartz 1.8.5 + OpenLiberty 18.0.0.4/Websphere Liberty 17.0.0.4 java.lang.NoClassDefFoundError : oracle/sql/BLOB

quartz-scheduler - Spring Batch 2.1.8 当 quartz cron 触发器触发时运行作业的单个实例