springboot 入門二- 讀取配置信息一
在上篇入門中簡單介紹下springboot啟動使用了大量的默認配置,在實際開發過程中,經常需要啟動多個服務,那端口如何手動修改呢? 此篇就是簡單介紹相關的配置文件信息。
Spring Boot允許外部化你的配置,這樣你就可以在不同的環境中使用相同的應用程序代碼。你可以使用屬性文件、YAML文件、環境變量和命令行參數來外部化配置。屬性的值獲取可以通過註解@Value 、 spring Environment或註解
@ConfigurationProperties
這些方式優先級如下:
- @TestPropertySource / @SpringBootTest#properties 註解用於測試中。
- 命令行參數(參數使用--xxx=yyy方式來傳遞)
- -》 SPRING_APPLICATION_JSON=‘{"foo":{"bar":"spam"}}‘ java -jar myapp.jar
- -》 java -jar myapp.jar --spring.application.json=‘{"foo":"bar"}‘
- -》java -jar myapp.jar --foo=bar --server.port=9090
ServletConfig
初始化參數ServletContext
初始化參數- 來自
java:comp/env
的JNDI屬性 - Java系統屬性(
System.getProperties()
- 操作系統環境變量
RandomValuePropertySource
配置的random.*
屬性值- 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]}
- my.number=${random.int}
jar
包外部的application-{profile}.properties
或application.yml
(帶spring.profile
)配置文件jar
包內部的application-{profile}.properties
application.yml
(帶spring.profile
)配置文件jar
包外部的application.properties
或application.yml
(不帶spring.profile
)配置文件jar
包內部的application.properties
或application.yml
(不帶spring.profile
)配置文件@Configuration
註解類上的@PropertySource
- 通過
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
可以使用的屬性名如下:
person.firstName
,標準的駝峰式命名person.first-name
,虛線(-
)分割方式,推薦在.properties
和.yml
配置文件中使用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 入門二- 讀取配置信息一