我有一个spring批处理作业,它以给定的间隔扫描SFTP服务器。当它找到一个新文件时,就会开始处理。
它在大多数情况下都可以正常工作,但有一种情况下它不起作用:
但由于文件仍在上载中,因此在处理过程中遇到意外的输入块结尾,并发生错误。
如何在批处理作业处理开始之前检查文件是否已完全上载到SFTP服务器?
我们也遇到了类似的问题,我们的解决方案是,我们将spring batch cron trigger配置为每10分钟触发一次作业(虽然我们可以配置5分钟,因为文件传输时间不到3分钟),然后我们读取/处理10分钟前创建的所有文件。我们假设FTP操作在3分钟内完成。这给了我们一些额外的灵活性,例如当spring batch应用程序关闭时等。
例如,如果批处理作业在上午10:20触发,则我们读取上午10:10之前创建的所有文件,例如在10:30运行的wise作业读取10:20之前创建的所有文件。
注意:一旦读取,您需要删除或移动到历史文件夹以进行重复读取。
上载/上载到临时文件名时锁定文件
您可能有一个自动系统监视远程文件夹,并且希望防止它意外地拾取尚未完成上载的文件。由于大多数SFTP和FTP服务器(WebDAV除外)不支持文件锁定,因此需要防止自动系统以其他方式拾取文件。
常见的解决方法有:
>
数据文件上传完成后上传“完成”文件,并让自动化系统在处理数据文件之前等待“完成”文件。这是一个简单的解决方案,但在多用户环境中不起作用。
将数据文件上载到临时(“上载”)文件夹,并在上载完成后以原子方式将其移动到目标文件夹。
将数据文件上载到不同的临时名称,例如使用。filepart扩展,并在上载完成后自动重命名它们。让自动化系统忽略。filepart文件。
从这里得到的
我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。
我使用Spring批处理管理来管理和监视作业和执行。如何调用一个作业并从一个独立的java应用程序启动它,该应用程序具有到包含Spring Batch Admin WebApp的服务器的给定HTTP连接。 谢谢你的帮助
根据Spring batch JobOperator类的文档, https://docs.spring.io/spring-batch/4.0.x/api/org/springframework/batch/core/launch/JobOperator.html#restart-long- 重新启动失败或停止的作业执行。如果提供的id不存在或对应于在正常情况下已成功完成的JobInstance,
我最近开始使用java配置方式编写spring批处理程序,并使用spring批处理和starter包。我使用了分区的步骤和任务执行器来完成我的工作,我面临的问题是,一旦作业完成,批处理过程就不会停止,它一直在我的eclipse和Linux盒子中运行。我手动找到并终止作业。你能帮个忙吗。当我在没有分区步骤的情况下以单线程的方式运行作业时,这工作很好。 我的作业配置:
我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。