Springboot支持多个不同环境的profile进行切换,以提供不同环境下的配置。
一、如何创建多个不同的profile
1.在application.yml中,通过yml多文档块实现。
server:
port: 8082
spring:
profiles:
active: prod
---
spring:
profiles: dev
server:
port: 8083
---
spring:
profiles: prod
server:
port: 8084
上述代码通过分隔符“—”创建了两个不同的profile,分别是dev和prod。
2.多个属性文件
属性文件命名方式:application-{profile}.properties(.yml)
例如,有3个属性文件application.yml,applicaton-dev.yml, application-prod.yml
那么这三个文件分别定义了三个不同的profile: default, dev, prod。
3.命令行参数、系统变量、环境变量等
一些属性可以通过命令行参数来设置:
java -jar .\demo-0.0.1-SNAPSHOT.jar --var.test=123
上述指令设置了一个var.test属性,值为123。同理,也可使用系统变量-Dvar.test=123来实现。
这是因为Springboot获取属性值并非只从application.properties文件中读取,而是有一个优先顺序:
- @TestPropertySource 注解
- 命令行参数
- Java系统属性(System.getProperties())
- 操作系统环境变量
- 只有在random.*里包含的属性会产生一个RandomValuePropertySource
- 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在@Configuration类上的@PropertySource注解
- 默认属性(使用SpringApplication.setDefaultProperties指定)3.命令行参数、系统变量、环境变量等
-
一些属性可以通过命令行参数来设置:
4.@profile注解
通过@profile(“${profile}”)注解声明一个在该配置环境下的bean
@Profile("dev")
@Bean
public DataSource getDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(mysqlUrl);
dataSource.setUsername(mysqlUsername);
dataSource.setPassword(mysqlPassword);
return dataSource;
}
二、激活方式
spring.profiles.active属性能够指定要激活的profile,而这个属性本身也是一个属性,因此,也可以使用上文中环境变量、系统变量、命令行参数等方式来指定
1.通过application.properties(.yml)制定
spring.profile.active=dev
2、命令行参数、系统变量、环境变量等
版权声明:本文为mr_orange_klj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。