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