当前位置: 首页 > 知识库问答 >
问题:

避免OLTP上的Spring批处理作业

缪修德
2023-03-14

我们有一个用Spring Boot编写的REST API。这个应用程序的一部分是每天运行的Spring批处理作业。我希望Spring批处理作业完成后,一个退出代码返回到启动应用程序的shell脚本,因此我在main方法中添加了system.exit()。我才意识到这会导致整个Spring Boot应用程序退出,而这是我们不想要的。我正在寻找一种方法来执行Spring批处理作业,向调用它的shell脚本返回退出代码,并使Spring Boot应用程序仍然启动并运行。

我知道,我可以将Spring批处理作业安排在特定时间运行,作为正在运行的Spring Boot应用程序的一部分,它将在整个应用程序启动时运行。但这样做的问题是应用程序在OLTP上运行,我们不能让Spring批处理作业在OLTP上运行,因为这会试图同时在多个OLTP服务器上执行同一作业,从而导致作业的某些实例失败。

出于上述原因,我们希望在OLTP和单个批处理服务器上运行应用程序。我们的目标是Spring批处理作业将通过批处理服务器运行,并且应用程序将以该批处理服务器上的system.exit()结束(这样它就可以向shell脚本返回退出代码),而实际的Spring Boot应用程序将通过OLTP可用,并且不会有system.exit()语句。我不知道这是怎么可能的,但如果这一切对别人来说是有意义的,我很想听听他们的意见。

共有1个答案

傅正豪
2023-03-14

分离批处理逻辑。这似乎是个很糟糕的主意。为不同的功能创建单独的Spring引导。

如果您坚持要将它们保持在一起,请使用标志驱动的方法。在共享存储库中保留作业活动标志,并且在启动作业之前,检查是否有其他实例启动了该作业。您还可以给一个作业起一个名字,并让Spring批处理多次提交该作业。

 类似资料:
  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我有一个Spring批处理作业,它从DB读取并写入CSV。批处理作业正在尝试使用我正在从中读取的数据库来保存批处理的状态。我不希望这种事发生。我正在使用Spring4。 经过大量的搜索,我尝试了两种方法,但都失败了。 方法1: null 我得到的例外情况如下。虽然例外并不是一个节目停止,我想摆脱它。 错误日志:

  • 我们正试图建立关于如何在大型IT服务中使用Spring Batch的标准,并具有不同的商业利益。 我们可能会有几个属于不同业务领域的批次。我们已经知道其中一些必须从所有批次通用的表中获取一些参数(即Java和COBOL;例如日期参数)。 我们将实现的Spring批处理作业的数量很难评估。没有重写现有COBOL批次的目标,只要有可能,就鼓励连续流程处理。 一些关于概念证明的问题不时出现,但目前几乎没

  • 我正在使用Spring batch进行批处理,在进行批处理之前,我想验证所有作业参数,如productName、productID、开始日期、结束日期、productType,如果这些作业参数为null或包含错误值,我必须使验证步骤失败,并使作业失败。 我已经编写了验证步骤和Tasklet,在我的Tasklet中,我计划处理作业参数验证(对所有作业参数执行空检查)。因为我是第一次做Spring批处

  • 我已经开始探索Spring Batch,并遇到了一些基本问题。