【问题标题】:How to manage multiple profiles in Jhipster如何在 Jhipster 中管理多个配置文件
【发布时间】:2014-06-13 10:03:26
【问题描述】:

jhipster-sample-app 为例,如果同一应用程序将安装在具有不同配置的多台机器上,我该如何管理多个配置文件?

由于将使用 apache tomcat 进行部署,并且它可能运行一个或多个基于 jhipster 的应用程序,因此我想避免使用

-Dspring.profiles.active=MY_PROFILE

在 JAVA_OPTS 变量中。

还可能碰巧在同一个 tomcat 实例上运行具有不同配置文件的同一个应用程序。

【问题讨论】:

    标签: spring maven jhipster spring-profiles


    【解决方案1】:

    为应用程序配置配置配置文件以支持开发、测试、生产等不同环境是一个坏主意。 让我们假设您已经定义了三个简单的配置文件,例如 dev、test、prod。所以现在你为dev 构建这样的环境:

    mvn -Pdev clean package
    

    好的,现在您可以使用您的工件并进行部署了。下次你需要测试环境时,你必须这样:

    mvn -Ptest clean package
    

    您可以拿走您的工件并进行部署。但是,如果您想为两个或三个环境创建会发生什么?

    mvn -Pdev,test,prod clean package
    

    这通常会失败,因为处理不同的配置文件以产生三个不同的工件确实很棘手(并且在相同的领域是不可能的)。因此,最佳做法是删除配置文件并让您的构建仅通过以下方式生成:

    mvn clean package
    

    您需要的所有软件包,一个用于开发,一个用于测试,一个用于生产。

    One solution 就是创建一个这样的项目结构:

    .
    |-- pom.xml
    `-- src
        |-- main
        |   |-- java
        |   |-- resources
        |   |-- environment
        |   |   |-- test
        |   |   |   `-- database.properties
        |   |   |-- qa
        |   |   |   `-- database.properties
        |   |   `-- production
        |   |       `-- database.properties
        |   `-- webapp
    

    不同的文件夹和属性文件是占位符,只是为了显示路径。 接下来,您需要为每个环境提供一个assembly-descriptor,如下所示:

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    
      <id>test</id>
      <formats>
        <format>war</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <unpack>true</unpack>
          <useProjectArtifact>true</useProjectArtifact>
        </dependencySet>
      </dependencySets>
      <fileSets>
        <fileSet>
          <outputDirectory>WEB-INF</outputDirectory>
          <directory>${basedir}/src/main/environment/test/</directory>
          <includes>
            <include>**</include>
          </includes>
        </fileSet>
      </fileSets>
    </assembly>
    

    最后你需要像这样配置maven-assembly-plugin:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <id>test</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
        <execution>
          <id>qa</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
        <execution>
          <id>production</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    最终这将产生以下工件:artifact-VERSION-dev.warartifact-VERSION-test.warartifact-VERSION-prod.war,只需调用一次 Maven。如果您更深入地了解blog article,上面的内容会变得更加优雅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2013-04-23
      • 2016-09-05
      • 2011-12-21
      • 2010-09-15
      • 1970-01-01
      相关资源
      最近更新 更多