Spring批处理 - 整个Job上的一个事务

时间:2013-09-26 14:35:48

标签: spring transactions spring-batch

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

同意bellabax:这是一个坏主意。

但我不会进行第3次清理步骤,因为此步骤也可能失败,让事务不会回滚。

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

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