1. 程式人生 > >springboot 入門二- 讀取配置信息一

springboot 入門二- 讀取配置信息一

信息 htm 屬性文件 ade ava sources 變量 blog property

在上篇入門中簡單介紹下springboot啟動使用了大量的默認配置,在實際開發過程中,經常需要啟動多個服務,那端口如何手動修改呢? 此篇就是簡單介紹相關的配置文件信息。

Spring Boot允許外部化你的配置,這樣你就可以在不同的環境中使用相同的應用程序代碼。你可以使用屬性文件、YAML文件、環境變量和命令行參數來外部化配置。屬性的值獲取可以通過註解@Value 、 spring Environment或註解@ConfigurationProperties

這些方式優先級如下:

  1. @TestPropertySource / @SpringBootTest#properties 註解用於測試中。
  2. 命令行參數(參數使用--xxx=yyy方式來傳遞)  
    1. -》 SPRING_APPLICATION_JSON=‘{"foo":{"bar":"spam"}}‘ java -jar myapp.jar
    2. -》 java -jar myapp.jar --spring.application.json=‘{"foo":"bar"}‘
    3. -》java -jar myapp.jar --foo=bar  --server.port=9090
  3. ServletConfig 初始化參數
  4. ServletContext 初始化參數
  5. 來自java:comp/env的JNDI屬性
  6. Java系統屬性(System.getProperties()
  7. 操作系統環境變量
  8. RandomValuePropertySource配置的random.*屬性值
    1. my.number=${random.int}
      my.bignumber=${random.long}
      my.uuid=${random.uuid}
      my.number.less.than.ten=${random.int(10)}
      my.number.in.range=${random.int[1024,65536]}
  9. jar包外部的application-{profile}.propertiesapplication.yml(帶spring.profile)配置文件
  10. jar包內部的application-{profile}.properties
    application.yml(帶spring.profile)配置文件
  11. jar包外部的application.propertiesapplication.yml(不帶spring.profile)配置文件
  12. jar包內部的application.propertiesapplication.yml(不帶spring.profile)配置文件
  13. @Configuration註解類上的@PropertySource
  14. 通過SpringApplication.setDefaultProperties指定的默認屬性

以上只是springboot提供的方式,在日常工作中最常用的就是*.properties 、 *.yml

一、屬性文件配置路徑

SpringApplication將加載application.properties,並將它們添加到Spring環境,可以從以下路徑加載(優先級):

1、當前項目的/config子目錄

2、當前目錄

3、classpath的下的/config

4、類的classpath 根目錄

註意:

yml是一個類似展示樹狀結構層次,比較方便查閱。但它需要比較嚴格的寫法要求:屬性名的值和冒號中間必須有空格,如name: Isea533正確,name:Isea533就是錯的;不能使用tab鍵。

/config優先於classpath根目錄、 *.properties 優先 *.yml

二、profile屬性文件

在應用程序中有很多配置項,例如數據庫連接地址、日誌文件位置、應用服務器配置等等。為了安全與靈活性,推薦將配置文件放在生產環境的服務器上,並嚴格控制訪問權限。在運行應用時可以通過參數指定配置文件。

springboot提供規則的命名文件讀取來區分環境:application-{profile}.properties

默認的文件是application-default.properties

設定測試環境:application-test.properties

只需要在主application.properties加上配置

spring.profiles.active=test

就讀取測試環境配置屬性。

三、屬性占位符

例如:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

可以在配置文件中引用前面配置過的屬性(優先級前面配置過的這裏都能用)。

通過如${app.name:默認名稱}方法還可以設置默認值,當找不到引用的屬性時,會使用默認的屬性。

由於${}方式會被Maven處理。如果你pom繼承的spring-boot-starter-parent,Spring Boot 已經將maven-resources-plugins默認的${}方式改為了@ @方式,例如@[email protected]


四、屬性名稱匹配規則

例如有如下配置對象:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
    private String firstName;
}

firstName可以使用的屬性名如下:

  1. person.firstName,標準的駝峰式命名
  2. person.first-name,虛線(-)分割方式,推薦在.properties.yml配置文件中使用
  3. PERSON_FIRST_NAME,大寫下劃線形式,建議在系統環境變量中使用

五、其它默認配置查看及修改

要調整自己使用的配置,首先要了解springboot maven 引導層級關系

技術分享

spring-boot-autoconfigure.jar 此為自動加載各種配置的。

tomcat服務相關配置: org.springframework.boot.autoconfigure.web.ServerProperties

spring.mvc的配置:org.springframework.boot.autoconfigure.web.WebMvcProperties

其它web相關配置都在web目錄下相對應的類中。

springboot 入門二- 讀取配置信息一