Spring高級(jí)注解@PropertySource詳細(xì)解讀
Spring注解@PropertySource
@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過(guò)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文件
如果想通過(guò)@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)建一個(gè)YAML解析工廠。 YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); //設(shè)置資源。 factory.setResources(encodedResource.getResource()); //獲取解析后的Properties對(duì)象 Properties properties = factory.getObject(); //返回。此時(shí)不能像默認(rèn)工廠那樣返回ResourcePropertySource對(duì)象 ,要返回他的父類PropertiesPropertySource對(duì)象。 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高級(jí)注解@PropertySource詳細(xì)解讀的文章就介紹到這了,更多相關(guān)Spring注解@PropertySource內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法
這篇文章主要介紹了idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法,通過(guò)將File Encodings內(nèi)容設(shè)置為UTF-8,本文通過(guò)圖文展示,需要的朋友可以參考下2021-06-06springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼
本篇文章主要介紹了springboot + Quartz 實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02一次Jvm old過(guò)高的排查過(guò)程實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次Jvm old過(guò)高的排查過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Java中如何使用正則表達(dá)式提取各種類型括號(hào)中的內(nèi)容
最近在工作中遇到一個(gè)問題,就是需要一個(gè)字符串中每一個(gè)中括號(hào)里的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Java中如何使用正則表達(dá)式提取各種類型括號(hào)中的內(nèi)容,需要的朋友可以參考下2023-06-06MyBatis?handleResultSet結(jié)果集解析過(guò)程示例
這篇文章主要為大家介紹了MyBatis?handleResultSet結(jié)果集解析過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Java內(nèi)存泄漏問題的排查、優(yōu)化與最佳實(shí)踐
在?Java?開發(fā)中,內(nèi)存泄漏是一個(gè)常見且令人頭疼的問題,內(nèi)存泄漏指的是程序在運(yùn)行過(guò)程中,已經(jīng)不再使用的對(duì)象沒有被及時(shí)釋放,從而導(dǎo)致內(nèi)存占用不斷增加,最終可能導(dǎo)致程序崩潰或性能顯著下降,本文給大家介紹了Java內(nèi)存泄漏排查、優(yōu)化與最佳實(shí)踐2025-01-01淺談ThreadLocal為什么會(huì)內(nèi)存泄漏
這篇文章主要介紹了淺談ThreadLocal為什么會(huì)內(nèi)存泄漏,每個(gè)Thread內(nèi)部維護(hù)著一個(gè)ThreadLocalMap,它是一個(gè)Map,這個(gè)映射表的Key是一個(gè)弱引用,其實(shí)就是ThreadLocal本身,Value是真正存的線程變量Object,需要的朋友可以參考下2023-12-12java CompletableFuture實(shí)現(xiàn)異步編排詳解
這篇文章主要為大家介紹了java CompletableFuture實(shí)現(xiàn)異步編排詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01SpringBoot自定義加載yml實(shí)現(xiàn)方式,附源碼解讀
這篇文章主要介紹了SpringBoot自定義加載yml實(shí)現(xiàn)方式附源碼解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03