我使用Spring-Batch执行批处理,在数据库中创建一些对象,从这些对象创建一个文件,然后将文件发送到FTP服务器。
因此,我有两个步骤:一个从数据库读取 conf,插入数据库并创建文件;第二个将文件发送到 FTP 服务器。
问题是当FTP服务器出现问题时,我无法回滚事务(以取消对DB的新插入)。
如何将我的作业配置为在不同的步骤中只使用一个事务?
由于spring-batch的事务性质,这不是一个好主意。< br> IMHO一个简单的解决方案应该是使用作业开始时生成的令牌来标记在步骤1中保存的数据,并且如果您的FTP上传将失败,请转到清理步骤以使用令牌删除所有数据。
同意贝拉巴的观点:这是个坏主意。
但我不会执行第三个清理步骤,因为此步骤也可能失败,使事务无法回滚。
您可以使用一个标志来标记插入的条目,该标志指示条目尚未发送到FTP。第三步将切换标志以指示这些条目已发送到FTP。
然后你只需要一个cron/batch/第四次清理步骤/任何可以删除所有没有发送到FTP的条目的东西