0
在spring批處理中可以使用jobRepository來使用本地事務,但在分佈式XA事務中執行特定的作業步驟?Spring批處理以及XA和本地事務
對於XA我使用Atomicos 3.8.0。步驟應該是讀取JMS消息並在處理後更新數據庫。
彈簧結構的相關部分:
<job id="job" xmlns="http://www.springframework.org/schema/batch">
<step id="inventorySync">
<tasklet transaction-manager="xaTransactionManager">
<chunk reader="jmsQueueReader"
processor="messageProcessor"
writer="dbWriter"
reader-transactional-queue="true"/>
</tasklet>
</step>
</job>
<bean id="xaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"
lazy-init="true" depends-on="inventoryDataSource">
<constructor-arg name="transactionManager" ref="userTransactionManager"/>
<constructor-arg name="userTransaction" ref="userTransaction"/>
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="batchJobsDataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="databaseType" value="${batch.data.source.type}"/>
</bean>
<jdbc:embedded-database id="batchJobsDataSource" type="HSQL"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="batchJobsDataSource"/>
</bean>
我明白2管理員方法的缺點,但對於我的工作,重啓時再次執行相同的步驟並不重要。 – Vladimir