如何使用Spring Batch处理不一致状态?

时间:2017-06-07 08:30:17

标签: spring amazon-dynamodb spring-batch

在我的spring批处理应用程序中,CustomItemWriter必须在两个单独的表(DynamoDB)中更新值。如果一个表更新成功并且在更新第二个表时发生了一些异常,那么第一个表中的更新也应该回滚(要么更新都应该成功,要么都没有)。

我正在使用以下弹簧批量配置

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
    </bean>

    <bean id="transactionManager"
    class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />


    <bean id="jobLauncher"
    class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
    </bean> 

我怎样才能做到这一点。春季批次是否有任何支持。我们是否应该使用MapJobRepositoryFactoryBean以外的其他东西?

1 个答案:

答案 0 :(得分:0)

DynamoDB中的所有操作都是原子操作。因此,多个操作无法联合起来进行交易管理。 DynamoDB本身不像RDBMS那样提供此功能。

但是,AWS有一个包装器library

其他替代解决方案将使用DynamoDB流来更新第二个表。

1)在表1上创建DynamoDB流 2)项目成功更新后,会生成一个流 3)您可以使用流记录来更新表2

Dynamodb stream example