maven profile实现多环境打包
项目开发需要有多个环境,一般为开发,测试,正式等环境,通过maven可以实现按不同环境进行打包部署 。
1、拆分 application.yml 文件
首先我们有一个非常简单的 application.yml 文件 ,该文件里指定所使用的环境和其他的公共参数。
spring:
profiles:
active: dev
#如果有其他公共参数可以补充进来
在src/main/resource目录下,再创建yml配置文件存放不同环境的参数 ,命名规则为 application-{profiles}.yml 。
例如:
application-dev.yml
# 开发配置
spring:
datasource:
url : jdbc:mysql://127.0.0.1:3306/dev?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username : root
password : mysql
application-prod.yml
#生产配置
spring:
datasource:
url : jdbc:mysql://x.x.x.x:3306/prod?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username : root
password : 12345678
2、用Maven控制默认配置
之前,我们将项目打成包后,在运行的时候需要指定配置,略嫌麻烦。这里我们使用maven-resources-plugin插件在打包的时候,自动改变spring.profiles.active的激活配置,这样直接通过java -jar xxx.jar即可运行项目。
在pom.xml添加如下配置
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
在< build>里添加如下配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>default-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>#</delimiter>
</delimiters>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources.${spring.profiles.active}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
修改 application.yml 文件
spring:
profiles:
active: #spring.profiles.active#
注意看 pom.xml 中的 <delimiter>#</delimiter> 定义了一个占位符,可以在复制文件的时候,在文件中查找 #...# 将其中的内容进行替换。
通过以上两种方法修改后,再次运行 mvn package -P dev 打包,将生成的 Jar 包用 RAR 解压,直接查看 application.yml 文件,我们可以看到原来的 #spring.profiles.active# 已经被替换成了 dev ,这样在运行 Jar 包时就不需要进行参数指定,直接运行 java -jar xxx.jar 即可。
