Spring(3.1.1)でMySQLにトリガーを保存するQUARTZ(2.1.3)に問題があります。いくつかのデバッグの後、私は次のようにフローを理解しました:
- ScheduleFactoryBean.afterPropertiesSetは、起動時にregisterJobsAndTriggersを呼び出します
- this.transactionManager.getTransaction(new DefaultTransactionDefinition())
- DataSourceUtils.doGetConnection(dataSource); (LocalDataSourceJobStoreクラス内)
- 手順3の接続を使用して、トリガーとジョブの詳細を挿入します。
- DataSourceUtils.releaseConnection(con、this.dataSource); (LocalDataSourceJobStore内)
- this.transactionManager.commit(transactionStatus)(ステップ1から)
- commit()はtriggerBeforeCompletionを呼び出します(AbstractPlatFormTransactionManager内)
- (ConnectionHolder内の)referenceCountがゼロ(releaseConnectionによって1から0に変更)であるため、triggerBeforeCompletionは最終的にconnection.close()を呼び出します。
- connection.closeは、MySQL側のログに示されているように、ROLLBACKをトリガーします。
これが私の設定情報です:
<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サイトで調査に基づいてさまざまな構成変更を試しましたが、トリガーをQRTZテーブルに保存することはできませんでした。
前もって感謝します。