是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子

Posted

技术标签:

【中文标题】是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子【英文标题】:Is it possible to make one fat jar with two spring boot app inside each with @SpringBootApplication main 【发布时间】:2021-02-06 15:17:44 【问题描述】:

我是 Spring Boot/gradle 的新手,所以如果我说错了,请随时纠正我。

我有两个 Spring Boot 项目,我正在使用 Spring Boot Gradle Plugin 在不同的端口中一一运行,并生成相应的 jars。

我想知道是否可以生成一个可以在不同端口上运行两个项目的胖 jar。

这是我的项目的结构:

项目

setting.gradle

项目-1

src/.../@SpringBootApplication Main build.gradle

项目-2

src/.../@SpringBootApplication Main2 build.gradle

我将两个项目都包含在setting.gradle中,Project-2包含在Project-1的依赖项中,并尝试了gradle clean build,但是Project-1中生成的fat jar不包含Project-2的jar。我期望的是,当我运行 fat jar 时,它会在各自的端口中公开两个项目,就好像我对每个项目都做了gradle bootRun

我做的对吗?我假设将 Project-2 放在 Project-1 的依赖项中会使 gradle 创建我想要的胖 jar。

或者那是不可能的,我只需要使用给我的两个罐子?

感谢您的宝贵时间。

【问题讨论】:

你试过谷歌搜索吗?有多种方法可以实现这一点,具体取决于用例可接受的方式。您可以在同一个 tomcat 实例后面部署多个 jar,也可以创建一个包含这两个应用程序的新 jar。不过推荐第一个 是的,我搜索了谷歌,这就是我遇到问题的方式。之所以在此处发布此内容,是因为我自己达到了自己的极限。感谢您的回答,我会尝试在这些方向上搜索更多内容。 【参考方案1】:

您可以在同一个 tomcat 实例后面部署两个单独的 jar 以获得相同的结果。假设你在tomcat后面部署my-first-jar.jarmy-second-jar.jar,你会得到两组端点,比如:

http://localhost:8080/my-first-jar/apis-from-first-jar

http://localhost:8080/my-second-jar/apis-from-second-jar

但是,您似乎无法正确创建胖罐。默认情况下,项目的依赖项不包含在 jar 中。您需要明确地对构建工具(在您的情况下为 gradle)说来制作一个胖罐子。看看here

一旦创建了项目 1 的胖 jar,它也将包含来自项目 2 的文件,但您将只能运行单个 spring boot 应用程序。

PS:如果您愿意,您可以在单个容器应用程序中运行多个应用程序。看看here,但不建议你走那条路,因为它很乱

【讨论】:

再次感谢您的回答。我正在调查你提到的事情,一旦我解决了这个问题,我会尽快回复你。 所以,我最终分别使用了两个罐子,每个罐子都在一个容器和不同的端口中。感谢您的帮助。

以上是关于是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子的主要内容,如果未能解决你的问题,请参考以下文章

如何从独立涡轮流应用程序中收集涡轮流

关于 Angular 中的 Microsoft Graph API 集成 - Spring Boot 应用程序

[答疑]单纯信息展示的站点是否可以用UML建模

[答疑]单纯信息展示的站点是否可以用UML建模

直播功能测试用例

是否可以用 pyx 排版分数?