使用Maven的基于Spring Boot配置文件的WAR

时间:2019-01-14 13:43:10

标签: java maven spring-boot deployment war

我需要根据特定的环境属性文件创建WAR文件。

所以我创建了2个属性文件,

  • application.DEV.properties

  • application.PROD.properties

现在,当我使用Eclipse嵌入式tomcat运行项目时,我将-Dspring.profiles.active=DEV作为VM参数传递。然后,当我命中端点时,可以看到返回了与DEV相关的消息。当我将PROD作为参数传递时,情况也是如此。

现在,我要执行的操作是使用maven命令创建WAR文件,并以加载特定属性文件的方式传递参数。因此,我已经介绍了Google以及stackoverflow,并找到了如下所示的各种选项

  1. mvn全新安装-Drun.profiles = DEV
  2. mvn全新安装-Drun.jvmArguments =“-Dspring.profiles.active = DEV”
  3. mvn全新安装-Dspring.profiles.active =“ DEV”
  4. mvn全新安装-Dspring.profiles.active = DEV

我尝试了以上所有方法。当我按下命令时,将生成WAR。但它无法部署在tomcat上,因为它无法读取属性文件并给出错误。似乎特定于配置文件的属性文件未加载到WAR中。

当我想使用maven生成WAR文件时,我想知道-Dspring.profiles.active=DEV的替代方案是什么?

如何生成WAR以正确包含特定于配置文件的属性文件?

我正在使用弹簧靴1.5.14.RELEASE。

2 个答案:

答案 0 :(得分:2)

正如Mickael对这个答案的评论,您可以从Maven文档中获得有关如何使用配置文件的帮助:https://maven.apache.org/guides/introduction/introduction-to-profiles.html

使用Maven选择配置文件的常用方法是

mvn -Pprod package

prod是您的个人资料的名称。如果您想使用开发人员配置文件进行构建,

mvn -Pdev package

此类配置文件在文件pom.xmlproject>profiles>profile下定义。在那个地方,您可以指定包装选项。

这是一个个人资料:

<profile>
    <id>dev</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <!-- log configuration -->
        <logback.loglevel>DEBUG</logback.loglevel>
        <!-- default Spring profiles -->
        <spring.profiles.active>dev${profile.no-liquibase}</spring.profiles.active>
    </properties>
</profile>

答案 1 :(得分:1)

您必须将spring.profiles.active传递给运行时,而不是传递给“构建运行时”。在构建时需要的唯一弹簧轮廓将用于测试。

如果发生“对Tomcat的战争”,则可以设置spring.profiles.active

  1. (全局)在<tomcat_home>/bin/中创建名为setnev.sh的文件(在Windows计算机上分别为.bat),

    export JAVA_OPTS="-Dspring.profiles.active=PROFILE_OF_THIS_TOMCAT"
    

    分别:

    set JAVA_OPTS="-Dspring.profiles.active=PROFILE_OF_THIS_TOMCAT"
    
  2. (全局)在<tomcat_home>/conf/catalina.properties中添加一行:

    spring.profiles.active=PROFILE_OF_THIS_TOMCAT
    
  3. (在容器级别),在context.xml处添加一个名为$CATALINA_BASE/conf/[enginename]/[hostname]/的文件(您也可以将其放入/<webapp_root>/META-INF/,但是您必须在构建时进行区分时间),其内容如下:

    <Context>
     <Environment name="spring.profiles.active" value="PROFILE_OF_THIS_TOMCAT" /> 
    </Context>