【问题标题】:Spring batch and XA and local transactionsSpring 批处理和 XA 以及本地事务
【发布时间】:2012-12-31 10:46:15
【问题描述】:

是否可以在 Spring Batch 中有一个 jobRepository 以使用本地事务但在分布式 XA 事务中执行特定的作业步骤?

对于 XA,我使用 Atomicos 3.8.0。步骤应该是读取 JMS 消息并在处理后更新数据库。

spring配置相关部分:

<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>

【问题讨论】:

    标签: java spring transactions spring-batch distributed-transactions


    【解决方案1】:

    在成功在单元测试中使用 Bitronix 并在生产中成功使用 WebSphere JTA 之前,我已经在所有 3 个资源中使用了 XA 事务。如果批处理数据库与步骤的其余部分有单独的事务管理器,则在任一位置(批处理数据库或步骤)发生故障时,步骤和批处理数据库将面临“不同步”的风险)。

    例如,您可能在步骤(JMS 和 DB)上成功提交,然后在批处理数据库上失败。当您重新开始工作时,它会认为某个步骤不成功,而您的基础执行却是。覆盖同一事务管理器中的所有 3 个资源将防止这种情况发生。

    【讨论】:

    • 我了解 2 位经理方法的缺点,但对于我的工作而言,重新启动时再次执行相同的步骤并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2018-07-28
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多