Spring Boot是一個非常方便的框架,可以快速地構建應用程序,同時,它也提供了很多配置文件以供我們使用。在本文中,我們將會詳解如何使用Spring Boot的配置文件。
一、常規配置文件
Spring Boot中的常規配置文件只需要在src/main/resources目錄下創建以application為前綴的配置文件即可,如下:
application.properties application.yml
其中application.properties是以鍵值對的形式組織的,如:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost/test spring.datasource.username=root spring.datasource.password=root
而application.yml則是以縮進的方式組織的,如:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost/test username: root password: root
在這樣的配置文件中,我們可以對各種配置項進行配置。其中spring代表要配置的模塊,後面跟着的datasource代表數據源模塊,而driver-class-name、url、username、password則是datasource模塊下的具體配置項。
二、多環境配置
有時我們需要根據不同的環境來配置不同的配置項,比如開發環境、測試環境和生產環境等。這時就需要使用Spring Boot的多環境配置功能了。
在Spring Boot中,我們可以創建以application-{profile}.properties或application-{profile}.yml的文件來配置不同的環境。其中,{profile}代表不同的環境,如:
application-dev.properties # 開發環境 application-test.properties # 測試環境 application-prod.properties # 生產環境 application-dev.yml application-test.yml application-prod.yml
在application-test.yml中,可以這樣配置數據源:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost/test username: root password: root logging: level: root: debug org: springframework: debug
這樣,在測試環境中,我們可以將日誌級別設置成debug,以便更好地進行調試工作。
三、配置優先級
Spring Boot使用一種特定的順序來加載配置文件,以應對多個配置來源的情況。具體優先級如下:
1.命令行參數
2.來自java:comp/env的JNDI屬性
3.Java System屬性(SpringApplication.setDefaultProperties)指定的系統屬性
4.操作系統環境變量
5./WEB-INF/classes/application.properties或application.yml(應用程序根路徑下)
6.來自@PropertySource註解的屬性Source
7.默認屬性(org.springframework.boot.autoconfigure.core.DefaultProperties)
即,命令行參數的優先級最高,而默認屬性的優先級最低。
四、使用@ConfigurationProperties
Spring Boot中的@ConfigurationProperties註解可以將配置文件中的屬性映射到Java類中的屬性上。需要注意的是,這個類必須被@Bean註解,才能保證Spring Boot將會把這個類的屬性注入到Bean中。
以讀取數據源配置為例,我們可以這樣創建一個DataSourceConfig類:
@Configuration @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceConfig { private String driverClassName; private String url; private String username; private String password; // getters and setters }
然後我們就可以在其他需要用到數據源的地方將DataSourceConfig注入進去,如:
@RestController public class UserController { @Autowired private DataSourceConfig dataSourceConfig; @GetMapping("/user") public String getUser() { // 使用dataSourceConfig獲取數據源相關信息 return "user info"; } }
五、使用@Value註解
除了@ConfigurationProperties註解外,我們還可以使用@Value註解來獲取配置文件中的屬性值。需要注意的是,使用@Value註解只能讀取單個屬性值。
以讀取日誌級別配置為例,我們可以這樣創建一個LoggingConfig類:
@Component public class LoggingConfig { @Value("${logging.level.root}") private String rootLogLevel; @Value("${logging.level.org.springframework}") private String springLogLevel; // getters and setters }
然後我們就可以在其他需要用到日誌級別的地方將LoggingConfig注入進去,如:
@RestController public class UserController { @Autowired private LoggingConfig loggingConfig; @GetMapping("/user") public String getUser() { // 使用loggingConfig獲取日誌級別相關信息 return "user info"; } }
六、使用PropertySources
有時,我們可能需要使用多個配置文件,或者使用其他文件來配置應用程序。這時,我們可以使用Spring Boot的PropertySources來讀取這些屬性。
以讀取外部配置文件為例,我們可以這樣創建一個ExternalConfig類:
@Configuration @PropertySources({ @PropertySource("file:/path/to/config.properties"), @PropertySource(value = "classpath:default.properties", ignoreResourceNotFound = true) }) public class ExternalConfig { @Value("${external.property}") private String externalProperty; // getters and setters }
在這個配置文件中,我們用@PropertySources註解指定了讀取外部配置文件的路徑,同時還可以指定一個默認的配置文件,當外部配置文件不存在時,將會使用默認的配置文件。
七、結語
Spring Boot的配置文件功能非常強大,可以很好地滿足我們的各種需求。本文介紹了Spring Boot的常規配置文件、多環境配置、配置優先級、使用@ConfigurationProperties註解、使用@Value註解和使用PropertySources,希望對大家有所幫助。
原創文章,作者:VYWGL,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368490.html