SpringBoot 多个profile支持 (不使用Spring Cloud情况下)

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。