Spring Batch中的XA事务

时间:2013-01-05 05:24:09

标签: transactions batch-processing spring-batch distributed-transactions xa

我正在使用Spring Batch编写许多批处理作业,这些作业主要是从/向数据库导出/导入。 Spring Batch作业存储库数据库和目标数据库(从/向我读/写数据)位于不同的机器上。

我的问题是我应该在此配置中使用XA事务吗?

我想知道在某个时间点链接到作业存储库db brakes的情况,是否会破坏数据?像这样:

  1. 工作已开始(写入工作存储库)
  2. 在事务
  3. 中的目标数据库中读取/处理/写入
  4. 链接到作业存储库db brakes和作业失败
  5. 最后我更新了目标数据库,但作业失败,因此在作业重启后将再次处理相同的数据。

1 个答案:

答案 0 :(得分:1)

Spring Batch在其读取器/写入器中具有禁用临时状态保存的功能(将属性saveState设置为false)。这允许您独立于Spring Batch JobRepository管理处理状态。

在您的示例中,您将在读取表上维护“已处理标志”并将select语句修改为select * from x where processed = false。这样可以减少对JobRepository状态的依赖。

查看http://static.springsource.org/spring-batch/reference/html/readersAndWriters.html#process-indicator,更详细地解释一下。