7

我正在使用Spring-Batch执行一个批处理,该批处理在数据库中创建一些对象,从这些对象创建一个文件,然后将文件发送到 FTP 服务器。

因此,我有两个步骤:一个从 DB 读取 conf,插入 DB 并创建文件;第二个将文件发送到 FTP 服务器。

问题是当 FTP 服务器出现问题时,我无法回滚事务(取消对数据库的新插入)。

如何将我的作业配置为在不同步骤中仅使用一个事务?

4

2 回答 2

3

由于 spring-batch 的事务性质,这是一个坏主意。
恕我直言,一个简单的解决方案应该是使用作业开始时生成的令牌标记步骤 1 中保存的数据,如果您的 FTP 上传失败,请转到清理步骤以删除所有带有令牌的数据。

于 2013-09-26T15:23:21.660 回答
2

同意 bellabax:这是个坏主意。

但我不会做第三个清理步骤,因为这一步也可能失败,让事务不回滚。

您可以用一个标志标记插入的条目,指示条目尚未发送到 FTP。第三步将切换标志以指示这些条目已发送到 FTP。

然后你只需要一个 cron/batch/4th 清理步骤/任何可以删除所有未发送到 FTP 的条目

于 2013-09-26T16:00:23.167 回答