繁体   English   中英

避免在OLTP上进行Spring Batch作业

[英]Avoiding Spring Batch jobs on OLTP

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

我知道我可以安排Spring Batch作业作为正在运行的Spring Boot应用程序的一部分在特定时间运行,并且它将在整个应用程序启动时的那个时间运行。 但问题在于应用程序在OLTP上运行,而我们无法在OLTP上运行Spring Batch作业,因为那样会尝试同时在多个OLTP服务器上执行同一作业,从而导致某些作业实例失败。

由于上述原因,我们希望在OLTP以及单个批处理服务器上运行该应用程序。 我们的目标是使Spring Batch作业在批处理服务器中运行,并且应用程序将在此批处理服务器上以System.exit()结尾(以便它可以将退出代码返回到shell脚本),而实际的Spring引导应用程序将通过OLTP提供,并且没有System.exit()语句。 我不知道这是怎么可能的,但是,如果这一切对其他人来说甚至遥不可及,我都希望听听他们的意见。

分隔批处理逻辑。 这似乎是个坏主意。 为不同的功能创建单独的弹簧靴。

如果您坚持将它们保持在一起,请执行标记驱动方法。 在共享存储库中保留作业活动标志,并在开始作业之前,检查是否有其他实例启动了作业。 您还可以为作业命名,并从多次提交作业中获得Spring Batch。

我们的目标是Spring Batch作业将通过批处理服务器运行,并且应用程序将以System.exit()结尾

杜德(Dude),这本身是不可能的。 如果您希望批处理作业通过Shell子进程运行并读取进程退出代码,请不要使用spring批处理。 这不是那个意思。 春季批处理用于通过春季批处理作业使用重试逻辑处理许多记录,并提供一个框架/设计模式来读取记录,然后将其写入另一个源。

因此,伙计,只需将正在批处理的Java逻辑提取到一个简单的spring-boot应用程序中即可。 可能将其作为一个jar文件包含在REST处理程序和独立的springboot应用程序中。 看来您实际上是通过Shell脚本而不是spring-batch真正地管理作业。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM