Spring Boot的配置加載機制是基于Spring框架的Environment
接口和PropertySource
實現的,它提供了一種強大的方式來管理應用程序的配置信息。下面是Spring Boot配置加載機制的工作原理:
-
加載順序:Spring Boot的配置加載機制遵循一定的加載順序,不同的配置源按照優先級逐個加載,后面加載的會覆蓋前面的。加載的順序如下:
-
命令行參數
-
系統屬性
-
環境變量
-
JNDI屬性
-
JAVA System屬性
-
隨機值屬性(用于測試)
-
配置文件(默認
Application.properties
或application.yml
) -
配置文件中的
profile-specific
配置(如application-dev.properties
或application-prod.yml
)
-
-
屬性來源:配置信息來自不同的屬性源,包括屬性文件、環境變量、命令行參數等。Spring Boot的
Environment
接口負責管理這些屬性源。 -
屬性加載:Spring Boot會將配置屬性加載到
Environment
中,Environment
中的屬性會被Spring應用程序上下文使用。這意味著可以在應用程序中輕松地訪問配置屬性。 -
@ConfigurationProperties:Spring Boot提供了
@ConfigurationProperties
注解,它可以用于將配置屬性綁定到Java對象上。這使得你可以創建一個POJO類來表示一組相關配置屬性,然后在這個類上使用@ConfigurationProperties
注解進行映射。這是一種類型安全的方式來獲取配置屬性。 -
Profile:Spring Boot支持不同的配置Profile,可以根據激活的Profile加載不同的配置文件。Profile可以在配置文件名中指定,例如
application-dev.properties
或通過命令行參數來激活。 -
Spring Boot配置文件:Spring Boot的配置文件支持多種格式,包括屬性文件(
.properties
)和YAML文件(.yml
)。這些配置文件可以包含不同Profile下的配置信息,以及自定義配置。
總的來說,Spring Boot的配置加載機制是基于Environment
的屬性源管理,它提供了一種非常靈活的方式來管理應用程序的配置信息,支持多種配置格式,可以根據不同的環境和需求加載不同的配置,而且還支持屬性綁定到Java對象,使得配置更加類型安全。
以下是一些配置加載機制的介紹和示例說明。
屬性文件 (application.properties/application.yml)
Spring Boot允許在application.properties
或application.yml
文件中定義配置屬性。這些文件通常位于應用的classpath中,可以包含應用程序的各種配置信息。屬性文件是默認加載的配置源。
例子(application.properties
):
server.port=8080
spring.datasource.url=jdbc:MySQL://localhost/mydb
spring.datasource.username=root
spring.datasource.password=secret
例子(application.yml
):
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost/mydb
username: root
password: secret
命令行參數
可以在啟動應用程序時傳遞命令行參數,這些參數會覆蓋屬性文件中的相同屬性。
示例:
java -jar myapp.jar --server.port=9090 --spring.datasource.url=jdbc:mysql://localhost/otherdb
環境變量
Spring Boot也支持使用環境變量來配置應用程序。環境變量的名稱需要遵循一定的規則,通常是將屬性名轉換為大寫并用下劃線替代點。
示例(linux/Unix環境下):
export SERVER_PORT=9090
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost/otherdb
Profile
Spring Boot支持配置文件的激活,這是通過Profile來實現的。不同的Profile可以根據不同的需求加載不同的配置文件,例如application-dev.properties
和application-prod.properties
。
示例:
在application.properties
中定義一個通用屬性,然后在不同的Profile配置文件中覆蓋這些屬性。
# application.properties
common.property=value
# application-dev.properties
common.property=dev-value
自定義配置
除了上述默認的配置源,還可以創建自定義的配置類來加載配置。這可以通過使用@Configuration
和@ConfigurationProperties
來實現。
示例:
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {
private String customProperty;
// getter and setter for customProperty
}
然后,在application.properties
或application.yml
中設置自定義屬性:
myapp.customProperty=my-custom-value
這些是Spring Boot的配置加載機制的一些示例和介紹。通過組合使用這些機制,可以實現非常靈活的應用程序配置,以滿足不同環境和需求的需求。
示例中完整代碼,可以從下面網址獲取:
https://gitee.com/jlearning/wechatdemo.git
https://Github.com/icoderoad/wxdemo.git