Quartz grail 插件问题
Issue with Quartz grail plugin
我有一个 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 的新手,所以我不知道发生了什么。
一般来说,用睡眠锁定作业线程不是一个好主意
如果你有一个工作运行一个很长的过程你必须把它分成几个工作以便尽快释放线程
我认为 Grails 插件在捆绑的 quartz.properties 文件中将 threadCount 设置为 10,假设您使用的是 Grails 3,您可以像这样在 application.yml 中覆盖:
quartz:
threadPool:
threadCount: 25
Grails 2 - application.groovy
quartz {
props {
threadPool.threadCount = 100
}
}
我有一个 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 的新手,所以我不知道发生了什么。
一般来说,用睡眠锁定作业线程不是一个好主意
如果你有一个工作运行一个很长的过程你必须把它分成几个工作以便尽快释放线程
我认为 Grails 插件在捆绑的 quartz.properties 文件中将 threadCount 设置为 10,假设您使用的是 Grails 3,您可以像这样在 application.yml 中覆盖:
quartz:
threadPool:
threadCount: 25
Grails 2 - application.groovy
quartz {
props {
threadPool.threadCount = 100
}
}