SpringBoot中使用Spring profile进行配置【谨慎使用,参见SpringBoot 2.4.0发布文档】

Spring profile是一种条件化的配置,在运行时,Spring根据哪些profile处于激活状态,可以使用或忽略不同的bean、配置类和配置属性。

⒈,定义方式

  1.基于约定创建另外一个配置文件

    文件名称要遵守如下约定:  application-{profile名称}.yml   or   application-{profile名称}.properties,然后,我们就可以在文件中声明适用于该profile的配置属性了。

    application-prod.yml

spring:
  datasource:
    url: jdbc:mysql://localhost/coreqi
    username: fanqi
    password: coreqi
logging:
  level:
    cn.coreqi: WARN

  2.将特定profile的属性和非profile的属性都放到application.yml中【仅适用于YAML配置】

  将特定profile的属性和非profile的属性都放到application.yml中,它们之间使用3个中划线进行分割,并且使用spring.profiles属性来命名profile。

logging:
  level:
    cn.coreqi: DEBUG  #没有指定spring.profiles则这些属性是所有profile通用的
    
---

spring:
  profiles: prod  #指定了spirng.profiles则这些属性仅属于当前profile
  datasource:
    url: jdbc:mysql://localhost/coreqi
    username: fanqi
    password: coreqi
logging:
  level:
    cn.coreqi: WARN

 

⒉激活profile

  1,在配置文件中激活【开发中常用】

spring:
  profiles:
    active:   #可以激活一个,也可以激活多个
      - prod
      - audit
      - ha

  2,通过环境变量激活【生产环境中较常用】

export SPRING_PROFILES_ACTIVE=prod,audit,ha

  3,如果以jar或war部署在servlet容器中,可以以命令行参数的形式设置激活的profile

java -jar coreqi.jar --spring.profiles.active=prod,audit,ha

  *如果我们将Spring应用部署在Cloud Foundry中,将会自动激活一个名为cloud的profile。如果生产环境是Cloud Foundry,那么可以将生产环境相关的属性放到cloud profile下。

 

⒊通过profile条件化的创建bean

  默认情况下,无论哪个profile处于激活状态,Java配置类中所声明的Bean都将被创建。

  通过@Profile注解,可以将某些Bean声明为 仅在特定的profile为激活的状态下才会被创建。

    @Bean
    @Profile("dev") //在dev模式下启动
    public CommandLineRunner dataLoader(){
    ...
    }

    @Bean
    @Profile({"dev","qa"})  //在dev or qa模式下启动
    public CommandLineRunner dataLoader(){
    ...
    }

    @Bean
    @Profile("!prod")   //在非prod模式下启动
    public CommandLineRunner dataLoader(){
    ...
    }

  @Profile注解,同时可以使用到配置类上。

@Configuration
@Profile({"!prod","!qa"})
public class DevConfig {
    ...
}

 

posted @ 2020-11-27 16:23  SpringCore  阅读(842)  评论(0编辑  收藏  举报