2

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

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

我想知道在某个时间点链接到作业存储库 db 刹车时的场景,它是否会损坏数据?像这样:

  1. 作业开始(写入作业存储库)
  2. 在事务中的目标数据库中读取/处理/写入
  3. 链接到作业存储库数据库刹车和作业失败

最后我更新了目标数据库,但作业失败,因此在作业重新启动时将再次处理相同的数据。

4

1 回答 1

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更详细地解释它。

于 2013-01-06T01:06:21.857 回答