【发布时间】:2011-08-01 19:10:00
【问题描述】:
我正在为预定的时间创建一个主 cronjob,从该作业开始,我会毫不拖延地创建 10 个 simpletrigger 作业,并且为每个 simpletriger 作业创建另一组 100 个作业。
我正在使用 spring,我的线程池大小是 30,我正在使用 h2 数据库、JobStoreTX、StdJDBCDelegate 进行数据库连接。我的应用程序是一个独立的 java 程序,它启动主要工作。
它在 qrtz 表中创建了第一组 jobdetail/触发器详细信息。当它执行第一个跨越子作业的简单作业时,会在触发器和作业条目上获得表锁。
可能是什么问题?
例外是: “原因:org.h2.jdbc.JdbcSQLException:检测到死锁。当前事务已回滚。详细信息:” 会话 #64(用户:SA)正在等待锁定 PUBLIC.QRTZ_SIMPLE_TRIGGERS,同时锁定 PUBLIC.QRTZ_TRIGGERS(独占)。 会话 #67(用户:SA)正在等待锁定 PUBLIC.QRTZ_TRIGGERS,同时锁定 PUBLIC.QRTZ_SIMPLE_TRIGGERS(独占)。”;SQL 语句: 插入到 qrtz_SIMPLE_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP,REPEAT_COUNT,REPEAT_INTERVAL,TIMES_TRIGGERED)值(?,?,?,?,?)[40001-132] 在 org.h2.message.DbException.getJdbcSQLException(DbException.java:316) 在 org.h2.message.DbException.get(DbException.java:167) 在 org.h2.message.DbException.get(DbException.java:144) 在 org.h2.table.RegularTable.doLock(RegularTable.java:435) 在 org.h2.table.RegularTable.lock(RegularTable.java:382)"
【问题讨论】:
-
有问题将并发触发器和作业,主触发器将在其子触发器和作业完成其任务之前完成。另一个问题,如果我在石英中的线程池计数为 30,这意味着我应该有池中只有 30 个作业,还是表示正在运行的作业数?
标签: spring scheduled-tasks scheduling quartz-scheduler