如何在关键的云代工中部署多模块maven spring-boot项目



我有一个多maven模块春季启动项目。比方说,在父"服务"one_answers"配置"中有两个模块。服务取决于配置。config模块包含DB配置代码(cassandradb(的类。我在服务模块的pom中添加了配置模块作为依赖项。Sprinngboot应用程序在本地运行良好。父pom的包装为pom。子模块,即Service和config,都封装为jar。我不需要制造任何战争,因为不需要网络应用程序。它只是休息微服务。为了打包这个项目,我在根pom级别执行了'vn-package'。它为各个模块创建了jar。服务模块是定义主方法的模块。我在服务模块级别创建了清单文件,并在云中部署了服务模块的jar。应用程序在云上运行良好。我相信服务模块的jar隐含地包含来自配置模块的必需依赖项,因为我已经在服务模块的pom中将配置定义为依赖项。

接下来,如果我只想在配置模块中进行一些修改,即使服务没有变化,它是否仍然需要创建服务的jar并将其部署在云中?或有没有一种方法可以让我只在云中部署配置模块的jar?如果是,我将如何将我的服务模块与云中的服务模块绑定,以保持它像以前一样运行?

multihaven项目的云部署推荐方式是什么?

编辑:1为了使问题更加清晰和准确,我正在寻找在云中部署的标准方式。我正在提出我目前如何进行部署的步骤,并参考这一点,我在当前步骤中应该做些什么改进。我有3个pom.xml文件。1名父母和2名子女。此外,配置模块在服务模块的pom.xml 中被定义为依赖项

对于以下步骤的部署,我正在采取-

  1. 转到父pom的路径并运行"mvn包"它在子模块中创建相应的jar(服务中有1个jar,配置中有一个jar(
  2. 在服务模块中创建一个manisfest.yml文件,并在清单文件中列出服务jar的路径和其他所需的配置
  3. 登录云代工,导航到manifest.yml文件所在的服务模块路径,并执行"cf-push"它在云中部署并启动我的应用程序。一切都好

接下来,假设我在配置模块类代码中进行了修改。如何在云中部署配置模块的jar?我的应用程序还能工作吗?

以前我只部署了服务模块的jar,而没有部署配置模块的jar。应用程序运行良好。但在未来,如果我只在配置模块中进行更改,而不接触服务模块,我是否仍然需要像最初那样创建服务的jar,或者有一种方法我只是为配置模块重新创建jar,只修改并部署它。

您需要一个父项目来将其整合在一起:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.greg</groupId>
<artifactId>boot-multi-module-example</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>service</module>
<module>config</module>
</modules>
</project>

您需要一个配置项目作为父项的子项,类似于:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>boot-multi-module-example</artifactId>
<groupId>com.greg</groupId>
<version>1.0</version>
</parent>
<artifactId>config</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

最后是您将部署的引导应用程序,它依赖于上面的配置服务:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.greg</groupId>
<artifactId>boot-multi-module-example</artifactId>
<version>1.0</version>
</parent>
<artifactId>service</artifactId>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- tag::actuator[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.greg</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
</dependency>
<!-- end::actuator[] -->
<!-- tag::tests[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- end::tests[] -->
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

接下来,假设我在配置模块类代码中进行修改。如何在云中部署配置模块的jar?我的应用程序还能工作吗?

不可能对Cloud Foundry进行部分部署。我的意思是,您不能从应用程序中获取一个JAR文件并将其交换到现有的应用程序代码包中。每次更改代码时,无论更改有多小,都需要执行cf push

当您运行cf push时,您将向Cloud Foundry发送一个"完整"的应用程序代码包来运行。如果您更改了整个捆绑包的任何部分,则需要再次cf push。这听起来可能效率低下,但cf push是智能的,可以跳过服务器上已经存在的文件,因此您会注意到后续的推送更小、更快。

你仍然需要舞台&不过,请重新启动应用程序。这是不可避免的,因为您无法就地更改应用程序。这会产生一片雪花,或者应用程序从水滴中分离出来,这被认为是不好的做法。

长话短说。。。

  1. 重新生成已更改的模块
  2. 重建您正在推送给Cloud Foundry的JAR/WAR
  3. 推送云代工厂

您的更改将被部署。

最新更新