我使用 Spring-Batch 执行批处理,在数据库中创建一些对象,从这些对象创建文件,然后将文件发送到FTP服务器。
因此,我有两个步骤:一个从DB读取conf,插入数据库并创建文件;第二个将文件发送到FTP服务器。
问题是当FTP服务器出现问题时,我无法回滚事务(取消对数据库的新插入)。
如何将我的作业配置为在不同步骤中仅使用一个交易?
答案 0 :(得分:3)
由于春季批次的交易性质,这是一个坏主意 恕我直言,一个简单的解决方案应该是在作业开始时使用生成的令牌标记步骤1中保存的数据,如果您的FTP上传失败,请转到清理步骤以使用令牌删除所有数据。
答案 1 :(得分:2)
同意bellabax:这是一个坏主意。
但我不会进行第3次清理步骤,因为此步骤也可能失败,让事务不会回滚。
您可以使用标志标记插入的条目,该标志指示尚未将条目发送到FTP。 第3步将切换标志以指示这些条目已发送到FTP。
然后你只需要一个cron / batch / 4th清洁步骤/任何会删除所有尚未发送到FTP的条目