项目中,经常会将多个环境的环境变量分开写到配置文件中,然后通过maven打包是根据当前部署的环境取响应环境的变量。
准备环境变量配置文件
- 在项目根目录下准备环境变量"env-test.properties" 和 "env-prod.properties",分别对应生产环境;
- 在项目src/main/resources目录下准备“application.properties”文件,程序从application.properties文件中读取环境变量;
- “application.properties”文件中,通过 ${} 引用不同环境的环境变量
如:
# application.properties
wechat.mp.appId=${WECHAT.APPID}
wechat.mp.secret=${WECHAT.SECRET}
wechat.mp.token=${WECHAT.TOKEN}
- env-test.properties文件中的环境变量
# env-test.properties
WECHAT.APPID=abc****appid
WECHAT.SECRET=abc****appidSECRET
WECHAT.TOKEN=abc**token
- 配置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>
需要注意的是,<resources> 只能替换配置文件中的环境变量;若需要替换war包中js或者html等的环境变量,需要使用 maven-war-plugin 插件
若项目使用了 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>