SpringBoot 常用讀取配置文件的 3 種方法!

我們在SpringBoot框架進行項目開發中該如何優雅的讀取配置呢?或者說對于一些List或者Map應該如何配置呢?
【SpringBoot 常用讀取配置文件的 3 種方法!】本篇主要解決如下幾個問題:
1、Spring Boot有哪些常用的讀取配置文件方式?
1)使用 @Value 讀取配置文件
2) 使用 @ConfigurationProperties 讀取配置文件
3)使用 Environment 讀取配置文件
2、一些復雜的數據結構,如List、Map , 如何配置?如何讀取呢?
前言Spring Boot默認的配置文件有兩種格式: application.propertiesapplication.yml 。查找順序是首先從application.properties 查找,
如果找不到,再查找 application.yml 。優先級:application.properties > application.yml 。
以yml中rabbitmq的配置為例,配置文件如下:
rabbitmq:host: 127.0.0.1password: rootport: 5672username: root一、使用 @Value 讀取配置文件這種方法適用于對象的參數比較少的情況
我們可以直接在對象的屬性上使用 @Value 注解 , 同時以 ${} 的形式傳入配置文件中對應的屬性 。同時需要在該類的上方使用 @Configuration 注解,將該類作為配置
文件加入,在啟動項目的時候實現注入 。
@Configurationpublic class RabbitmqProperties {@Value("${rabbitmq.host}")private String rabbitmqHost;@Value("${rabbitmq.port}")private String rabbitmqPort;@Value("${rabbitmq.username}")private String rabbitmqUsername;@Value("${rabbitmq.password}")private String rabbitmqPassword;}如果哪里需要用到,通過 @Autowired 注入進去就可以獲取屬性值了
@Componentpublic class PropertiesTest {@Autowiredprivate RabbitmqProperties rabbitmqProperties;}二、使用 @ConfigurationProperties 讀取配置文件如果對象的參數比較多情況下,推薦使用 @ConfigurationProperties 會更簡單一些,不需要在每一個字段的上面的使用@Value注解 。
@ConfigurationProperties注解聲明當前類為配置讀取類
prefix="rabbitmq" 表示讀取前綴為rabbitmq的屬性
示例如下:
@ConfigurationProperties(prefix = "rabbitmq")public class RabbitmqProperties {private String host;private String port;private String username;private String password;}這里有一點需要注意: 必須保證屬性名稱和字段一模一樣,且類需要提供字段的setter方法
注意 如果僅僅只是使用了 @ConfigurationProperties 注解是沒有效果的,它并不會將這個配置注入容器中,它還需要和注入容器的注解一起使用 。
這里有兩種方法實現將它注入到容器中
1、類上添加@Configuration注解除了@Configuration , 也可以是@Controller、@RestController、@Service、@Componet等注解,加入到Ioc容器里 。
@Setter@Configuration@ConfigurationProperties(prefix = "rabbitmq")public class RabbitmqProperties {private String host;private String port;private String username;private String password;}同樣哪里需要用到,通過 @Autowired 注入進去就可以獲取屬性值了
2、使用@EnableConfigurationProperties注解通過 @EnableConfigurationProperties 注解可以將指定的配置讀取類的對象加載到Spring容器,也就是說,在其他配置類上使用一個@EnableConfigurationProperties注解,
來將配置文件的參數和RabbitmqProperties類的屬性綁定 。這樣就不需要在RabbitmqProperties類上使用@Configuration注解了
@Configuration@EnableConfigurationProperties(RabbitmqProperties.class)public class RabbitmqConfig {@Autowiredprivate RabbitmqProperties prop;@Beanpublic Rabbitmq rabbitmq() {Rabbitmq mq = new Rabbitmq();mq.setHost(prop.getHost());mq.setPort(prop.getPort());mq.setUsername(prop.getUsername());mq.setPassword(prop.getPassword());return mq;}}3、使用@ConfigurationPropertiesScan掃描在 Spring Boot 2.2.0.RELEASE 中提供了一個掃描注解@ConfigurationPropertiesScan 。它可以掃描特定包下所有的被@ConfigurationProperties標記的配置類,
并將它們進行IoC注入 。
@ConfigurationPropertiesScan@SpringBootApplicationpublic class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}}三、使用 Environment 讀取配置文件Environment 是 SpringCore 中的一個用于讀取配置文件的類 , 將此類使用 @Autowired 注入到類中就可以使用它的getProperty方法來獲取某個配置項的值 。
如下代碼所示:
@SpringBootApplicationpublic class MainApplication implements InitializingBean {@Autowiredprivate Environment environment;public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}@Overridepublic void afterPropertiesSet() {String username = environment.getProperty("rabbitmq.username");System.out.println("rabbitmq當前用戶名為:" + username);}}

推薦閱讀