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
即可。