Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免OLTP上的Spring批处理作业_Java_Spring_Spring Boot_Spring Batch - Fatal编程技术网

Java 避免OLTP上的Spring批处理作业

Java 避免OLTP上的Spring批处理作业,java,spring,spring-boot,spring-batch,Java,Spring,Spring Boot,Spring Batch,我们有一个用SpringBoot编写的RESTAPI。该应用程序的一部分是每天运行的Spring批处理作业。我希望在Spring批处理作业完成后将退出代码返回到启动应用程序的shell脚本,因此我在main方法中添加了一个System.exit()。直到那时我才意识到这会导致整个Spring引导应用程序退出,这是我们不希望看到的。我正在寻找一种执行Spring批处理作业的方法,向调用它的shell脚本返回一个退出代码,并使Spring启动应用程序仍处于运行状态 我知道我可以将Spring批处理作

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

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


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

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


如果你坚持要把它们放在一起,那就用旗标驱动的方法。在共享存储库中保留作业活动标志,在启动作业之前,检查是否有其他实例启动了作业。您还可以为作业命名,并让Spring批处理多次提交作业。

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

如果你坚持要把它们放在一起,那就用旗标驱动的方法。在共享存储库中保留作业活动标志,在启动作业之前,检查是否有其他实例启动了作业。您还可以为作业命名,并让Spring批处理多次提交作业

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

伙计,这本身是不可能的。如果希望批处理作业通过shell子进程运行并读取进程退出代码,请不要使用spring批处理。这并不意味着什么。SpringBatch用于通过SpringBatch作业处理具有重试逻辑的许多记录,并提供一个框架/设计模式,用于读取记录,然后将其写入另一个源

所以,伙计,只需将正在批处理的java逻辑提取到一个简单的spring boot应用程序中。可能将其作为一个jar文件包含,REST处理程序和独立的springboot应用程序都使用该文件。看起来您真正是在通过shell脚本而不是spring批处理来管理作业

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

伙计,这本身是不可能的。如果希望批处理作业通过shell子进程运行并读取进程退出代码,请不要使用spring批处理。这并不意味着什么。SpringBatch用于通过SpringBatch作业处理具有重试逻辑的许多记录,并提供一个框架/设计模式,用于读取记录,然后将其写入另一个源


所以,伙计,只需将正在批处理的java逻辑提取到一个简单的spring boot应用程序中。可能将其作为一个jar文件包含,REST处理程序和独立的springboot应用程序都使用该文件。看来您是在通过shell脚本而不是spring批处理来真正管理作业。

我认为在流程完成之前,您无法从流程返回退出代码。也就是说,如果您在主服务器之外运行作业(在独立JVM中),比如Spring Cloud Data Flow的工作方式,那么您就拥有了该功能。我认为在流程完成之前,您无法从流程返回退出代码。也就是说,如果您在主服务器之外运行作业(在独立JVM中),比如Spring云数据流的工作方式,那么您就拥有了该功能。