多环境配置
原文:http://www.importnew.com/29368.html
多环境配置
在开发应用时,常用部署的应用是多个的,比如:开发、测试、联调、生产等不同的应用环境,这些应用环境都对应不同的配置项,比如swagger
一般上在生产时是关闭的;不同环境数据库地址、端口号等都是不尽相同的,要是没有多环境的自由切换,部署起来是很繁琐也容易出错的。
maven的多环境配置
在没有使用过springboot
的多环境配置时,原先是利用maven
的profile
功能进行多环境配置,这里我简单回顾下。
maven配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<profiles> <profile> <id>dev</id> <activation> <activeByDefault> true </activeByDefault> </activation> <properties> <pom.port> 8080 </pom.port> </properties> </profile> <profile> <id>test</id> <properties> <pom.port> 8888 </pom.port> </properties> </profile> </profiles> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>** /*</include> </includes> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>**/ *.properties</include> </includes> <!-- 加入此属性,才会进行过滤 --> <filtering> true </filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>utf- 8 </encoding> <!-- 需要加入,因为maven默认的是${},而springbooot 默认会把此替换成@{} --> <useDefaultDelimiters> true </useDefaultDelimiters> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
然后编译时,加入-Ptest
,则会替换test
环境下的参数值。 完整参数:
1
|
mvn clean install -DskipTests -Ptest |
application.properties
1
|
server.port=${pom.port} |
利用maven实现多环境配置,比较麻烦的就是每次部署新环境时,都需要再次指定环境编译打包一次。一下进入主题,springboot
的多环境,比较优雅了许多。
springboot多环境配置
Profile是Spring针对不同环境不同配置的支持。需要满足application-{profile}.properties
,{profile}
对应你的环境标识。如:
application-dev.properties
:开发环境application-test.properties
:测试环境
而指定执行哪份配置文件,只需要在application.properties
配置spring.profiles.active
为对应${profile}
的值。
1
2
|
# 指定环境为dev spring.profiles.active=dev |
则会加载:application-dev.properties
的配置内容。
1
2
3
|
2018 - 07 - 15 14 : 52 : 41.304 INFO 15496 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2018 - 07 - 15 14 : 52 : 41.310 INFO 15496 --- [ main] c.l.l.s.chapter5.Chapter5Application : Started Chapter5Application in 8.506 seconds (JVM running for 10.81 ) 2018 - 07 - 15 14 : 52 : 41.316 INFO 15496 --- [ main] c.l.l.s.chapter5.Chapter5Application : 多环境应用启动. |
还可以在**命令行方式
**激活不同环境配置,如
1
|
java -jar xxx.jar --spring.profiles.active=test |
此时就会加载application-test.properties
的配置内容。 test:
这里顺便提一句,可能在不同环境下,可能加载不同的bean时,可利用@Profile
注解来动态激活
1
2
3
4
5
6
7
8
9
10
|
@Profile ( "dev" ) //支持数组:@Profile({"dev","test"}) @Configuration @Slf4j public class ProfileBean { @PostConstruct public void init() { log.info( "dev环境下激活" ); } } |
启动时。控制台输出:
1
|
2018 - 07 - 15 15 : 04 : 44.540 INFO 11876 --- [ main] c.l.l.springboot.chapter5.ProfileBean : dev环境下激活 |
总结
看完打开支付宝扫一扫领个红包吧!