1

我在使用 QUARTZ (2.1.3) 在 Spring (3.1.1) 下将触发器保存到 MySQL 时遇到问题。经过一番调试,我想出了如下流程:

  1. ScheduleFactoryBean.afterPropertiesSet 在启动时调用 registerJobsAndTriggers
  2. this.transactionManager.getTransaction(new DefaultTransactionDefinition())
  3. DataSourceUtils.doGetConnection(dataSource); (在 LocalDataSourceJobStore 类中)
  4. 使用步骤 3 中的连接插入触发器和作业详细信息
  5. DataSourceUtils.releaseConnection(con, this.dataSource); (在 LocalDataSourceJobStore 中)
  6. this.transactionManager.commit(transactionStatus) (从第 1 步开始)
  7. commit() 调用 triggerBeforeCompletion(在 AbstractPlatFormTransactionManager 中)
  8. triggerBeforeCompletion 最终调用 connection.close() 因为 referenceCount(在 ConnectionHolder 中)为零(由 releaseConnection 从 1 更改为 0)。
  9. connection.close 触发 ROLLBACK,如 MySQL 端的日志所示。

这是我的配置信息:

    <bean id="dataSource.dbcp" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">...</bean>
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">...</bean>

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="startupDelay" value="15" />
        <property name="applicationContextSchedulerContextKey" value="applicationContext" />
        <property name="schedulerName" value="mySched" />
        <property name="jobFactory" ref="springBeanJobFactory" />
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="triggers">
            <list>
                    <ref bean="dummyTrigger" />
            </list>
        </property>
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
                <prop key="org.quartz.threadPool.threadCount">5</prop>
                <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
                <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
            </props>
        </property>
    </bean>
<bean id="dummyTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">...</bean>

我已经尝试了基于 QUARTZ/Spring/This site 研究的各种配置更改,但并未将触发器保存在 QRTZ 表中。

提前致谢。

4

0 回答 0