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 {
    ...
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM