Maven打包时,环境变量替换,并解决spring-boot项目中${}无效的问题

项目中,经常会将多个环境的环境变量分开写到配置文件中,然后通过maven打包是根据当前部署的环境取响应环境的变量。

准备环境变量配置文件

  1. 在项目根目录下准备环境变量”env-test.properties” 和 “env-prod.properties”,分别对应生产环境;
  2. 在项目src/main/resources目录下准备“application.properties”文件,程序从application.properties文件中读取环境变量;
  3. “application.properties”文件中,通过 ${} 引用不同环境的环境变量
    如:
# application.properties
wechat.mp.appId=${WECHAT.APPID}
wechat.mp.secret=${WECHAT.SECRET}
wechat.mp.token=${WECHAT.TOKEN}
  1. env-test.properties文件中的环境变量
# env-test.properties
WECHAT.APPID=abc****appid
WECHAT.SECRET=abc****appidSECRET
WECHAT.TOKEN=abc**token
  1. 配置maven插件,在pom.xml文件中
<build>
    <!-- 环境变量文件 -->
    <filters>
        <filter>env-${env}.properties</filter>
    </filters>
    <!-- 项目打包名称 -->
    <finalName>wechat</finalName>
    <plugins>
        <!-- 其他插件在此添加,比如tomcat插件 -->

        <!-- war包资源通过环境变量替换 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <filtering>true</filtering>
                        <directory>src/main/webapp/App/www</directory>
                        <targetPath>指定include文件的目录</targetPath>
                        <includes>
                            <include>services.js</include>
                            <include>user/feature.js</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
    <!-- 配置文件的环境变量 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>
  1. 需要注意的是,<resources> 只能替换配置文件中的环境变量;若需要替换war包中js或者html等的环境变量,需要使用 maven-war-plugin 插件

  2. 若项目使用了 spring-boot-starter-parent 做项目版本管理,需要替换resource.delimiter属性

<!-- 使用spring-boot-starter-parent管理jar包版本 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.5.RELEASE</version>
</parent>

需要在<properties>中添加

<properties>
    <resource.delimiter>${}</resource.delimiter> 
</properties>

可以从spring-boot-starter-parent的pom.xml文件中查看 delimiter that doesn’t clash with Spring ${}

    <properties>
        <java.version>1.6</java.version>
        <resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>
    原文作者:maxbin
    原文地址: https://www.jianshu.com/p/cf3bd9ddfe6f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞