Spring高級注解@PropertySource詳細解讀
Spring注解@PropertySource
@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過YAML解析器,配合自定義PropertySourceFactory實現解析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實現。
添加依賴
<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(); //設置資源。 factory.setResources(encodedResource.getResource()); //獲取解析后的Properties對象 Properties properties = factory.getObject(); //返回。此時不能像默認工廠那樣返回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); } }
到此這篇關于Spring高級注解@PropertySource詳細解讀的文章就介紹到這了,更多相關Spring注解@PropertySource內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
idea中acitviti使用acitBPM插件出現亂碼問題及解決方法
這篇文章主要介紹了idea中acitviti使用acitBPM插件出現亂碼問題及解決方法,通過將File Encodings內容設置為UTF-8,本文通過圖文展示,需要的朋友可以參考下2021-06-06MyBatis?handleResultSet結果集解析過程示例
這篇文章主要為大家介紹了MyBatis?handleResultSet結果集解析過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02java CompletableFuture實現異步編排詳解
這篇文章主要為大家介紹了java CompletableFuture實現異步編排詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01