Spring高級注解@PropertySource詳細解讀
Spring注解@PropertySource
@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過YAML解析器,配合自定義PropertySourceFactory實現(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實現(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();
//設置資源。
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內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring boot整合flyway實現(xiàn)數(shù)據(jù)的動態(tài)維護的示例代碼
本文主要介紹了spring boot整合flyway實現(xiàn)數(shù)據(jù)的動態(tài)維護的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-04-04
如何使用IDEA開發(fā)Spark SQL程序(一文搞懂)
Spark SQL 是一個用來處理結構化數(shù)據(jù)的spark組件。它提供了一個叫做DataFrames的可編程抽象數(shù)據(jù)模型,并且可被視為一個分布式的SQL查詢引擎。這篇文章主要介紹了如何使用IDEA開發(fā)Spark SQL程序(一文搞懂),需要的朋友可以參考下2021-08-08
Java搭建一個springboot3.4.1項目?JDK21的詳細過程
這篇文章詳細介紹了如何使用IntelliJ IDEA搭建一個基于Spring Boot 3.4.1的項目,并使用JDK 21和Maven 3.6.3,涵蓋了環(huán)境準備、項目創(chuàng)建、依賴管理、Maven配置、以及解決常見問題的步驟,感興趣的朋友跟隨小編一起看看吧2025-01-01
詳解Java中NullPointerException異常的原因詳解以及解決方法
這篇文章主要介紹了詳解Java中NullPointerException異常的原因詳解以及解決方法。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08

