Spring Boot - Profile不同環境配置

茅坤寶駿氹發表於2018-05-04

轉載自 Spring Boot - Profile不同環境配置

Profile是什麼

Profile我也找不出合適的中文來定義,簡單來說,Profile就是Spring Boot可以對不同環境或者指令來讀取不同的配置檔案。

Profile使用

假如有開發、測試、生產三個不同的環境,需要定義三個不同環境下的配置。

基於properties檔案型別

你可以另外建立3個環境下的配置檔案:

applcation.properties

application-dev.properties

application-test.properties

application-prod.properties

然後在applcation.properties檔案中指定當前的環境spring.profiles.active=test,這時候讀取的就是application-test.properties檔案。

基於yml檔案型別

只需要一個applcation.yml檔案就能搞定,推薦此方式。

spring:
  profiles: 
    active: prod

---
spring: 
  profiles: dev  

server: 
  port: 8080  

---
spring: 
  profiles: test  

server: 
  port: 8081    

---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodmq

server: 
  port: 8082      

---
spring: 
  profiles: proddb  

db:
  name: mysql   

---
spring: 
  profiles: prodmq   

mq: 
  address: localhost

此時讀取的就是prod的配置,prod包含proddb,prodmq,此時可以讀取proddb,prodmq下的配置。

也可以同時啟用三個配置。

spring.profiles.active: prod,proddb,prodmq

基於Java程式碼

在JAVA配置程式碼中也可以加不同Profile下定義不同的配置檔案,@Profile註解只能組合使用@Configuration和@Component註解。

@Configuration
@Profile("prod")
public class ProductionConfiguration {

    // ...

}

指定Profile

main方法啟動方式:

// 在Eclipse Arguments裡面新增
--spring.profiles.active=prod

外掛啟動方式:

spring-boot:run -Drun.profiles=prod

jar執行方式:

java -jar xx.jar --spring.profiles.active=prod

除了在配置檔案和命令列中指定Profile,還可以在啟動類中寫死指定,通過SpringApplication.setAdditionalProfiles方法。

SpringApplication.class

public void setAdditionalProfiles(String... profiles) {
    this.additionalProfiles = new LinkedHashSet<String>(Arrays.asList(profiles));
}


相關文章