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