Spring Boot @PropertySource 載入指定配置檔案、@ImportResource 匯入Spring 配置檔案
目錄
@PropertySource 載入 properties 配置檔案
@PropertySource 載入 properties 配置檔案
1、通過《Spring Boot @ConfigurationProperties 、@Value 注值》知道使用“@Value”與“@ConfigurationProperties”可以從全域性配置檔案“application.properties”或者“application.yml”中取值,然後為需要的屬性賦值。
2、當應用比較大的時候,如果所有的內容都當在一個配置檔案中,就會顯得比較臃腫,同時也不太好理解和維護,此時可以將一個檔案拆分為多個,使用 @PropertySource 註解載入指定的配置檔案。
3、下面演示使用 @PropertySource 註解 載入類路徑下的 user.properties 配置檔案,為 User.java POJO 物件的屬性賦值。
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author wangmaoxiong
* Created by Administrator on 2018/7/11 0011.
* 使用者···實體
* @ConfigurationProperties 表示 告訴 SpringBoot 將本類中的所有屬性和配置檔案中相關的配置進行繫結;
* prefix = "user" 表示 將配置檔案中 key 為 user 的下面所有的屬性與本類屬性進行一一對映注入值,如果配置檔案中
* 不存在 "user" 的 key,則不會為 POJO 注入值,屬性值仍然為預設值
* <p/>
* @Component 將本來標識為一個 Spring 元件,因為只有是容器中的元件,容器才會為 @ConfigurationProperties 提供此注入功能
* @PropertySource (value = { " classpath : user.properties " }) 指明載入類路徑下的哪個配置檔案來注入值
*/
@PropertySource(value = {"classpath:user.properties"})
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private Integer id;
private String lastName;
private Integer age;
private Date birthday;
private List<String> colorList;
private Map<String, String> cityMap;
private Dog dog;
//省略 getter、setter 、toString 方法沒貼上
}
/**
* @author wangmaoxiong
* Created by Administrator on 2018/7/11 0011.
* 狗 實體類-----------普通 Java Bean。
* 被依賴項可以不加 @ConfigurationProperties 註解,但是必須提供 getter、setter 方法
*/
public class Dog {
private Integer id;
private String name;
private Integer age;
//省略 getter、setter 、toString 方法
}
4、在類路徑下提供 user.properties 配置檔案如下(.yml 檔案也是同理):
user.id=111
user.lastName=張無忌
user.age=120
user.birthday=2018/07/11
user.colorList=red,yellow,green,blacnk
user.cityMap.mapK1=長沙市
user.cityMap.mapK2=深圳市
user.dog.id=7523
user.dog.name=狗不理
user.dog.age=3
5、測試執行:
import com.wmx.yuanyuan.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class YuanyuanApplicationTests {
/**
* 因為 POJO類 使用了 Component 註解,就是 Spring 一個元件,交由了 Spring 容器注入值
* 所以使用 @Autowired 或者 @Resource,DI 注入在取值即可
*/
@Resource
private User user;
@Test
public void contextLoads() {
System.out.println("------------------------------********************--------------------------------------------");
System.out.println("·······················" + user);
}
}
@PropertySource 載入 yml 配置檔案
1、在上面 properties 的基礎上修改如下:
@PropertySource(value = {"classpath:user.yml"}, factory = PropertySourceFactory.class)
2、然後提供用於處理 yml 配置檔案的屬性資源工程如下:
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
import java.io.IOException;
import java.util.List;
/**
* 用於 @PropertySource 載入 yml 配置檔案.
*
* @author wangmaoxiong
* @version 1.0
* @date 2020/5/25 20:45
*/
public class PropertySourceFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
if (resource == null) {
return super.createPropertySource(name, resource);
}
List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
return sources.get(0);
}
}
@ImportResource 匯入Spring 配置檔案
1、@ImportResource 註解用來匯入 Spring 的配置檔案,如核心配置檔案 "beans.xml",從而讓配置檔案裡面的內容生效;
2、如果應用中仍然想採用以前 xml 檔案的配置方式,如 "beans.xml" ,則使用 “@ImportResource” 註解輕鬆搞定。
3、將 @ImportResource 標註在一個配置類上,通常直接放置在應用啟動類上,和 @SpringBootApplication 一起即可。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
/**
* 應用啟動類
*
* @ImportResource 必須放置在配置類上,通常放在啟動類即可,用 value 指明匯入類路徑下的那個 Spring 配置檔案
*/
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class CocoApplication {
public static void main(String[] args) {
SpringApplication.run(CocoApplication.class, args);
}
}
4、然後就可以在類路徑下提供原始的 beans.xml 配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 放入到Sping容器中,這是以前Spring的內容,不再累述-->
<bean id="userService" class="com.lct.service.UserService"/>
</beans>
5、啟動應用控制檯會列印:loading XML bean definitions from class path resource [beans. xml] 表示載入成功。
相關文章
- Spring Boot 配置檔案Spring Boot
- SpringBoot載入配置檔案(@PropertySource@importSource@Value)Spring BootImport
- Spring Boot入門(一):使用IDEA建立Spring Boot專案並使用yaml配置檔案Spring BootIdeaYAML
- spring boot配置檔案相關Spring Boot
- Spring Boot 配置檔案總結Spring Boot
- Spring Boot的配置檔案管理技巧Spring Boot
- js 匯入json配置檔案JSON
- MyBatis載入配置檔案MyBatis
- Springboot載入配置檔案Spring Boot
- 精進 Spring Boot 03:Spring Boot 的配置檔案和配置管理,以及用三種方式讀取配置檔案Spring Boot
- 【Spring註解驅動開發】使用@PropertySource載入配置檔案,我只看這一篇!!Spring
- Profile配置和載入配置檔案
- Spring檔案最全配置Spring
- JAVA載入配置檔案方法Java
- Spring Cloud Alibaba基礎教程:Nacos配置的多檔案載入與共享配置SpringCloud
- Spring Boot 2.4.0正式釋出,全新的配置檔案載入機制(不向下相容)Spring Boot
- rabbitMQ-Spring配置檔案MQSpring
- Spring Boot第二彈,配置檔案怎麼造?Spring Boot
- Spring Boot讀取配置檔案的幾種方式Spring Boot
- spring boot 打war包後沒有配置檔案Spring Boot
- [springboot]配置檔案載入順序Spring Boot
- SpringMvc+Spring+mybatis配置檔案SpringMVCMyBatis
- spring cloud+spring boot 電子商務spring boot獲取配置檔案的屬性CloudSpring Boot
- [maven][spring boot] mvn spring-boot:run啟動時,指定pom檔案MavenSpring Boot
- Spring boot + Vue axios 檔案下載Spring BootVueiOS
- Spring Boot加密應用配置檔案敏感資訊(jasypt)Spring Boot加密
- SpringBoot是如何載入配置檔案的?Spring Boot
- Springboot 載入配置檔案原始碼分析Spring Boot原始碼
- Spring載入配置檔案propertoies中util:properties和context:property-placeholder區別SpringContext
- 結合SpEL使用@Value-基於配置檔案或非配置的檔案的值注入-Spring BootSpring Boot
- Spring Boot 入門系列(二十五)讀取配置檔案的幾種方式詳解!Spring Boot
- Spring - 配置檔案中的特殊字元Spring字元
- spring和Mybatis的核心配置檔案SpringMyBatis
- 在Spring Boot中從類路徑載入檔案解決方案Spring Boot
- Spring Boot EL獲取配置檔案中的值的方式Spring Boot
- Spring Boot 框架中配置檔案 application.properties 當中的所有配置大全Spring Boot框架APP
- Spring Boot 檔案上傳與下載Spring Boot
- 精盡Spring Boot原始碼分析 - 配置載入Spring Boot原始碼