在qrtz表中创建触发器/作业时,石英调度程序死锁

问题描述:

我正在创建一个计划时间的主cronjob,从那个工作开始创建10个简单触发器作业,而且每个简单作业都创建另一组100个作业。在qrtz表中创建触发器/作业时,石英调度程序死锁

我使用spring和我的线程池大小是30,我正在使用h2数据库,JobStoreTX,StdJDBCDelegate进行数据库连接。我的应用程序是一个独立的Java程序,启动主要工作。

它在qrtz表中创建了第一套jobdetail/trigger详细信息。当它执行第一个简单作业时,跨作业子作业的触发器和作业条目获得表锁。

可能是什么问题?

例外是: “:org.h2.jdbc.JdbcSQLException:所致。死锁检测到的当前事务被回滚详细说明:” 会话#64(用户:SA)正等待锁定PUBLIC.QRTZ_SIMPLE_TRIGGERS而锁定PUBLIC.QRTZ_TRIGGERS(独占)。 活动#67(用户:SA)正等待锁定PUBLIC.QRTZ_TRIGGERS而锁定PUBLIC.QRTZ_SIMPLE_TRIGGERS(独家)“; SQL语句: INSERT INTO qrtz_SIMPLE_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP,REPEAT_COUNT,REPEAT_INTERVAL,TIMES_TRIGGERED)VALUES(?,? ,?,?,?)[40001-132] at org.h2.message.DbException.getJdbcSQLException(DbException.java:316) at org.h2.message.DbException.get(DbException.java:167) at org.h2.message.DbException.get(DbException.java:144) at org.h2.table.RegularTable.doLock(RegularTable.java:435) at org.h2.table.RegularTable.lock(RegularTable.java: 382)“

+0

有问题,会并发触发器和工作,一个主要触发即将完成其子触发前和作业完不成task.And另一个问题,如果在石英我的线程池数为30,这意味着我应该有池中只有30个工作或它表示正在运行的工作数量? – bubesh 2011-04-08 21:09:33

您是否正在使用H2的mvcc模式 - 这是必需的(至于I unde rstand它)为行锁定启用,而不是表锁定? (很像MySQL与没有InnoDB的区别)。

http://jira.opensymphony.com/browse/QUARTZ-773

+0

@house:谢谢,它工作。但涉及到另一个问题。 – bubesh 2011-04-08 21:05:08