如何在关键的Cloud Foundry中部署多模块Maven Spring Boot项目?

时间:2018-11-21 09:38:00

标签: maven spring-boot pivotal-cloud-foundry

我有一个多Maven模块的Spring Boot项目。可以说,父“服务”和“配置”中有2个模块。服务取决于配置。 config模块包含数据库配置代码(cassandra db)的类。 我在服务模块的pom中添加了config模块作为依赖项。 Sprinngboot应用程序在本地运行良好。 父pom具有包装作为pom。子模块即服务和配置都有打包成jar的形式。我不需要开战,因为不需要webapp。它只是其余的微服务。 为了打包项目,我在root pom级别执行了“ mvn package”。它为单个模块创建了jar。服务模块是定义主要方法的模块。 我在服务模块级别创建清单文件,并将服务模块的jar部署在云中。应用程序也可以在云上正常运行。我相信服务模块的jar隐式包含了配置模块的必需依赖项,因为我已经将config定义为服务模块pom中的依赖项。

接下来,如果我只想在config模块中进行一些修改,即使服务没有变化,它仍然需要创建服务jar并将其部署到云中吗? 要么 有没有办法我只能在云中部署jar配置模块?如果是,我如何将我的服务模块与云中的服务模块绑定以保持其正常运行?

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

修改:1  为了使问题更加清楚和精确,我正在寻找在云中进行部署的标准方法。我提出了目前我如何进行部署的步骤,并参考了我在当前步骤中应该做的改进。 我有3个pom.xml文件。 1个父母和2个孩子。另外,配置模块在服务模块的pom.xml中被定义为依赖项

要按照我正在执行的步骤进行部署-

  1. 转到父pom的路径并运行“ mvn软件包” 它在子模块中创建相应的jar(服务中有1个jar,配置中有1个jar)
  2. 在服务模块中创建manisfest.yml文件,并在清单文件中放置服务jar的路径以及其他所需的配置。
  3. 登录到Cloud Foundry,导航到存在清单.yml文件的服务模块的路径并执行“ cf push” 它在云中部署并启动我的应用程序。一切都好!

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

以前,我只部署了服务模块的jar,而没有部署配置模块的jar。应用运行正常。但是在将来,如果我仅在配置模块中进行更改并且不接触服务模块,我是否仍需要像最初那样创建服务罐,或者有一种方法可以为修改后的配置模块重新创建罐子仅部署。

2 个答案:

答案 0 :(得分:1)

您需要一个父项目来将其全部结合在一起:

/login

您需要一个配置项目作为父项的子项,例如:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
    }
}

最后是您将要部署的启动应用程序,它依赖于上述config服务:

<?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>

答案 1 :(得分:1)

  

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

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

运行cf push时,您正在向Cloud Foundry发送“完整”的应用程序代码包以运行。如果您更改了该完整捆绑包的任何部分,则需要再次cf push。听起来效率低下,但是cf push很聪明,会跳过服务器上已经存在的文件,因此您会注意到后续的推送变得更小,更快。

尽管如此,您仍然需要登台并重新启动应用程序。这是不可避免的,因为您无法就地更改应用程序。这将使雪花或与水滴分离的应用程序被视为不良做法。

长话短说...

  1. 重建已更改的模块。
  2. 重建要推送到Cloud Foundry的JAR / WAR。
  3. 推向Cloud Foundry

您的更改将被部署。