Spring高級注解@PropertySource詳細(xì)解讀
Spring注解@PropertySource
@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過YAML解析器,配合自定義PropertySourceFactory實(shí)現(xiàn)解析yaml文件
讀取properties文件
在resources資源目錄下存在datasource-config.properties,要加載此文件中的配置,需要用到@PropertySource注解,具體如下:
datasource-config.properties文件
druid.driverClassName=com.mysql.jdbc.Driver druid.url=jdbc:mysql://127.0.0.1/db1?useUnicode=true&characterEncoding=UTF-8 druid.username=root druid.password=123456
加載配置類
@Slf4j @Setter @Getter @Configuration @PropertySource(value = "classpath:datasource-config.properties") @ConfigurationProperties(prefix = "druid") public class SpringConfig { @Value("${druid.driverClassName}") private String driverClassName; @Value("${druid.url}") private String url; @Value("${druid.username}") private String username; @Value("${druid.password}") private String password; @Bean public void druidDataSource(){ log.info("driverClassName:[{}], url:[{}], username:[{}], password:[{}]", driverClassName, url, username, password); } }
讀取xml文件
在resources資源目錄下存在datasource-config.xml,要加載此文件中的配置,需要用到@PropertySource注解,具體如下:
加載配置類
@Slf4j @Setter @Getter @Configuration @PropertySource(value = "classpath:datasource-config.xml") @ConfigurationProperties(prefix = "druid") public class SpringConfig { @Value("${druid.driverClassName}") private String driverClassName; @Value("${druid.url}") private String url; @Value("${druid.username}") private String username; @Value("${druid.password}") private String password; @Bean public void druidDataSource(){ log.info("driverClassName:[{}], url:[{}], username:[{}], password:[{}]", driverClassName, url, username, password); } }
datasource-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="druid.driverClassName">com.mysql.jdbc.Driver</entry> <entry key="druid.url">jdbc:mysql://127.0.0.1/db1?useUnicode=true&characterEncoding=UTF-8</entry> <entry key="druid.username">root</entry> <entry key="druid.password">5201314..a</entry> </properties>
讀取yaml文件
如果想通過@PropertySorce注解加載yaml文件,需要配合自定義PropertySourceFactory實(shí)現(xiàn)。
添加依賴
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.23</version> </dependency>
自定義PropertySourceFactory
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.core.env.PropertiesPropertySource; 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.Properties; public class YAMLPropertySourceFactory implements PropertySourceFactory { @Override public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) throws IOException { //創(chuàng)建一個YAML解析工廠。 YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); //設(shè)置資源。 factory.setResources(encodedResource.getResource()); //獲取解析后的Properties對象 Properties properties = factory.getObject(); //返回。此時不能像默認(rèn)工廠那樣返回ResourcePropertySource對象 ,要返回他的父類PropertiesPropertySource對象。 return name != null ? new PropertiesPropertySource(name, properties) : new PropertiesPropertySource(encodedResource.getResource().getFilename(),properties); } }
datasource-config.yaml
druid: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1/db1?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456
加載配置類
@Slf4j @Setter @Getter @Configuration @PropertySource(value = "classpath:datasource-config.yml", factory = YAMLPropertySourceFactory.class) @ConfigurationProperties(prefix = "druid") public class SpringConfig { @Value("${druid.driverClassName}") private String driverClassName; @Value("${druid.url}") private String url; @Value("${druid.username}") private String username; @Value("${druid.password}") private String password; @Bean public void druidDataSource(){ log.info("driverClassName:[{}], url:[{}], username:[{}], password:[{}]", driverClassName, url, username, password); } }
到此這篇關(guān)于Spring高級注解@PropertySource詳細(xì)解讀的文章就介紹到這了,更多相關(guān)Spring注解@PropertySource內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法
這篇文章主要介紹了idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法,通過將File Encodings內(nèi)容設(shè)置為UTF-8,本文通過圖文展示,需要的朋友可以參考下2021-06-06springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼
本篇文章主要介紹了springboot + Quartz 實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02一次Jvm old過高的排查過程實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次Jvm old過高的排查過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Java中如何使用正則表達(dá)式提取各種類型括號中的內(nèi)容
最近在工作中遇到一個問題,就是需要一個字符串中每一個中括號里的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Java中如何使用正則表達(dá)式提取各種類型括號中的內(nèi)容,需要的朋友可以參考下2023-06-06MyBatis?handleResultSet結(jié)果集解析過程示例
這篇文章主要為大家介紹了MyBatis?handleResultSet結(jié)果集解析過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Java內(nèi)存泄漏問題的排查、優(yōu)化與最佳實(shí)踐
在?Java?開發(fā)中,內(nèi)存泄漏是一個常見且令人頭疼的問題,內(nèi)存泄漏指的是程序在運(yùn)行過程中,已經(jīng)不再使用的對象沒有被及時釋放,從而導(dǎo)致內(nèi)存占用不斷增加,最終可能導(dǎo)致程序崩潰或性能顯著下降,本文給大家介紹了Java內(nèi)存泄漏排查、優(yōu)化與最佳實(shí)踐2025-01-01java CompletableFuture實(shí)現(xiàn)異步編排詳解
這篇文章主要為大家介紹了java CompletableFuture實(shí)現(xiàn)異步編排詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01SpringBoot自定義加載yml實(shí)現(xiàn)方式,附源碼解讀
這篇文章主要介紹了SpringBoot自定義加載yml實(shí)現(xiàn)方式附源碼解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03