2012-05-18 104 views
1

我现在正在与Qrtz合作,并发现许多次子作业未在母版作业执行后自动启动。我调查了QRTZ库中由log4j生成的日志。我们发现表“qrtz_simple_triggers”中有一个触发器丢失问题。自从Mother作业将触发器插入到表“qrtz_triggers”之后发生了问题,然后立即将数据插入到“qrtz_simple_triggers”中。但对我而言,在完全插入表中的simeple触发器期间,有一段时间延迟了约1秒,同时,从“线程池”到“更新”表中的“qrtz_triggers”中的触发器状态从“WAITING”在母工作没有完成将触发器插入“qrtz_simple_triggers”的时候“获取”。所以,主线程在表中找不到简单的触发器,然后停止工作。 (对于那个孩子工作)石英:触发器表插入方法

我的观点是如何防止这种情况?我认为这两个插入语句不在同一个trasaction中。我现在正在对此进行调查,并假设将这些语句合并到同一事务中的解决方案。你会带给我更多的想法吗?

由于提前, 停止:)

+0

如何交易在您的应用程序进行管理,您使用春天来管理交易? – blob

+0

是Blob,但我不确定QRTZ如何管理其数据库连接。是否为每个为工作作业打开的连接设置了自动提交。我也在为此进行调查。 –

+0

仅供参考,我正在使用QRTZ版本。 1.8.6 :) –

回答

1

如果您使用Spring管理事务,然后检查post

设置

org.quartz.jobStore.class = org.springframework.scheduling.quartz.LocalDataSourceJobStore 
+0

嗨Blob,非常感谢你的回答。这仍然不适用于我:( –

+0

有没有办法强制QRTZ通过使用autoCommit = false? 正如我通过修改QRTZ JAR中的源代码,然后重新将其重新包装到我的项目中。需要通过QRTZ中的代码进行设置。不适用于属性。 –