springboot項目中PropertySource如何讀取yaml配置文件
PropertySource如何讀取yaml配置文件
springboot項目中,當(dāng)我們使用@Value注解讀取配置屬性,默認(rèn)的配置文件是properties類型文件,如果一些配置來自yaml格式配置文件,那么就需要做一個配置。
PropertySource注解提供了factory屬性,可以設(shè)置yaml格式文件加載工廠類。
下面介紹如何自定義factory實現(xiàn)yaml配置文件加載。
項目準(zhǔn)備
maven工程pom.xml增加spring-boot-starter-web依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
自定義YamlPropertySourceFactory
package com.xxx.web.config; import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.core.env.PropertySource; import org.springframework.core.io.support.EncodedResource; import org.springframework.core.io.support.PropertySourceFactory; import java.io.IOException; import java.util.List; public class YamlPropertySourceFactory implements PropertySourceFactory { @Override public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException { List<PropertySource<?>> list = new YamlPropertySourceLoader().load(resource.getResource().getFilename(),resource.getResource()); if(list != null && list.size() > 0) return list.get(0); return null; } }
yml配置文件使用
package com.xxx.web.controller; import com.xxx.web.config.YamlPropertySourceFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/test/v1") @PropertySource(value = {"file:conf/test.yml"},factory = YamlPropertySourceFactory.class) public class TestController { @Value("${business.errorCode}") private int errorCode; @Value("${business.msg}") private String msg; @Value("${business.data}") private String data; @RequestMapping(value = "/status",method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity queryStatus(){ Map<String,Object> result = new HashMap(){ { put("msg",msg); put("errorCode",errorCode); put("data",data); } }; return ResponseEntity.ok(result); } }
這里為了配合項目配置,配置文件放在工程根目錄下的conf/test.yml
business: errorCode: 2 msg: success, data: hallo
啟動項目,我們可以訪問地址http://localhost:8080/test/v1/status,可以看到,返回結(jié)果為配置文件中設(shè)置的值。
這里值得注意的是,@PropertySource在指定配置文件位置的時候,使用的是file,這種方式指定的路徑,是相對于項目根路徑來的,所以我們的配置文件沒有放在resources目錄下,
如果放在resources目錄下,要通過file訪問到,那么,位置需要設(shè)置成這樣:
@PropertySource(value={"file:src/main/resources/conf/test.yml"},factory=YamlPropertySourceFactory.class)
這里還可以通過classpath的方式來指定,如果conf/test.yml放在了resources類路徑下。
就可以這樣設(shè)置:
@PropertySource(value = {"classpath:conf/test.yml"},factory = YamlPropertySourceFactory.class)
注意兩種方式的區(qū)別,以及配置文件需要放置的位置。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
舉例講解Java中synchronized關(guān)鍵字的用法
這篇文章主要介紹了Java中synchronized關(guān)鍵字的用法,針對synchronized修飾方法的使用作出了簡單講解和演示,需要的朋友可以參考下2016-04-04Springboot中的@ConditionalOnBean注解詳細(xì)解讀
這篇文章主要介紹了Springboot中的@ConditionalOnBean注解詳細(xì)解讀,@ConditionalOnMissingBean注解兩個類,一個Computer類,一個配置類,想要完成;如果容器中沒有Computer類,就注入備用電腦Computer類,如果有Computer就不注入,需要的朋友可以參考下2023-11-11Java實現(xiàn)公用實體類轉(zhuǎn)Tree結(jié)構(gòu)
這篇文章主要為大家介紹了一個Java工具類,可以實現(xiàn)Java公用實體類轉(zhuǎn)Tree結(jié)構(gòu),文中的示例代碼簡潔易懂,感興趣的小伙伴可以參考一下2024-10-10SpringBoot快速整合RabbitMq小案例(使用步驟)
這篇文章主要介紹了SpringBoot快速整合RabbitMq小案例,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06Java處理異常2種機(jī)制關(guān)鍵字區(qū)別解析
這篇文章主要介紹了java處理異常2種機(jī)制關(guān)鍵字區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01