【发布时间】:2015-05-28 14:05:44
【问题描述】:
我有一个compositeItemWriter,它有2 个委托作者: 1. HeaderWriter 将我的对象中的一些字段写入 Header Table 2. DetailWriter 将文件写入明细表。
问题是,当 DetailWriter 发生异常时,数据不会从 Headerwriter 回滚。看起来数据正在 2 个不同的事务中更新。 如何通过在同一事务中进行两次更新来强制数据完整性?
仅供参考,我正在使用 Informix 并且不得不将一些 Spring 批处理类扩展为 让 Spring 在 Informix 上工作。
我的配置如下:
我的 reportjob.xml 中的部分:
<bean id="programHeaderWriter"
class="com.bah.discrepancy.writer.ProgramHeaderWriter">
<property name="dataSource" ref="dataSource" />
<property name="itemSqlParameterSourceProvider">
<bean
class="com.bah.discrepancy.parametermapper.ProgramHdrParameterMapper"/>
</property>
</bean>
<bean id="programDetailWriter"
class="com.bah.discrepancy.writer.ProgramDetailWriter">
<property name="dataSource" ref="dataSource" />
<property name="itemSqlParameterSourceProvider">
<bean
class="com.bah.discrepancy.parametermapper.ProgramDetailParamMapper" />
</property>
</bean>
上下文.xml:
<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransaction
Manager" />
<bean id="batchDefaultSerializer"
class="org.springframework.batch.core.repository.dao.
DefaultExecutionContextSerializer" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.informix.jdbc.IfxDriver"
/>
<property name="url" value="<URL>" />
<property name="username" value="<UserID>" />
<property name="password" value="<Password>" />
</bean>
<bean id="jobRepository"
class="com.bah.batch.informixsupport.InformixJobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="Informix"/>
<property name="incrementerFactory" ref="informixIncrementer"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="tablePrefix" value="BATCH_" />
</bean>
【问题讨论】:
-
你能分享你的配置吗?