将 Spring Boot Web 和 Batch 应用程序打包在一起以进行 PCF 部署
Posted
技术标签:
【中文标题】将 Spring Boot Web 和 Batch 应用程序打包在一起以进行 PCF 部署【英文标题】:Package both Spring Boot Web and Batch application together for PCF deployment 【发布时间】:2021-12-21 16:36:21 【问题描述】:这听起来很简单。但我想将一个 Spring Boot Web 应用程序和一个 Java 程序(又名 Batch 作业)打包在一起并将其部署到 PCF。
批次将只是坐在那里无所事事。但我将从命令行运行它。 (pcfrun-task
)。
我们如何打包这个?
【问题讨论】:
【参考方案1】:我认为有多种方法可以做到这一点,但从高层次上看,您需要以与您尝试执行应用程序的方式一致的方式打包应用程序。
对于您的 Web 应用程序,您将希望它成为主要命令。当 Java buildpack 运行时,它将检测 Spring Boot 应用程序并创建一个能够运行您的应用程序的启动命令。最简单的方法是不要以会影响或破坏这一点的方式更改您的包装。只需让 buildpack 选择启动命令并使用它。
如果您可以在本地 java -jar
您的应用程序并启动您的 Web 应用程序,那么您应该一切就绪。对于 buildpack 来说,这应该足够了。
现在,对于您的 Batch 应用程序。如果您有一个联合代码库,其中 web 和批处理代码一起在同一个项目中并被打包到同一个 JAR 文件中,那么只需使用 Java buildpack 为您的 web 生成的命令应用程序并对其进行修改以启动不同的类(可能还有内存限制)。命令的其余部分应该没问题。
如果您有单独的代码库,那么您需要以某种方式加入两者。当您运行cf push -p path/to/jar
时,cf CLI 将提取并上传 JAR 中的所有文件。这就是为什么您需要加入这两个代码库的原因,因为您只能为您的应用程序上传一个 JAR 文件。
我认为一个简单的方法是在 JAR 中的子目录下添加批处理应用程序的所有编译代码,例如 batch/...
(请注意您选择的子目录,您要确保您不会通过 Web 应用程序下载来公开您的批处理应用程序)。它应该以这种方式上传,并且不会影响 Java buildpacks 检测和运行您的 Web 应用程序的能力。
然后您可以使用 Java buildpack 生成的启动命令,调整类路径以指向子目录,调整启动类,可选择调整内存设置并使用它来启动批处理应用程序。
再一次,我确信您可能还有其他组合方式,但我希望这涵盖了 Cloud Foundry 和 Java buildpack 的限制因素,以便您可以以适合您项目的方式将它们混合在一起.
【讨论】:
then it is just a matter of taking the command that is generated by the Java buildpack for your web application and modifying it to start a different class (and possibly also memory constraints). The rest of the command should be OK.
可以详细说明一下吗?我希望 PCF 正常启动 Web 应用程序,离开 Batch 应用程序。我想使用来自应用程序外部的命令java - jar
像常规java 程序一样运行批处理。 PCF 有任务,可以使用cf run-task
发送命令。我将使用它来运行 Java 程序。
buildpack 生成的用于启动 Web 应用程序的默认命令将包含 java
的路径(不在 $PATH
上)以及代理配置和内存配置等其他内容。我建议人们使用 buildpack 生成的命令,然后根据需要对其进行修改,而不是从头开始生成自己的命令。它有助于防止丢失您可能希望为您的任务提供的选项。例如,您仍然需要确保您的任务将在默认启动命令将执行的容器内存限制内运行。以上是关于将 Spring Boot Web 和 Batch 应用程序打包在一起以进行 PCF 部署的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch Admin + Spring Boot - 不明确的映射。无法映射“org.springframework.batch.admin.web.JobController#1”方
Java spring boot + spring batch:处理大量信息
Spring Boot 之 Spring Batch 批处理实践
Spring Boot 之 Spring Batch 批处理实践
Spring boot Batch 的启动原理- Configuration
如何使用 CommandLineJobRunner 调用嵌入在 Spring Boot 应用程序中的 Spring Batch 作业