springBoot如何動(dòng)態(tài)加載資源文件
springBoot動(dòng)態(tài)加載資源文件
在實(shí)際項(xiàng)目中資源信息如果能夠動(dòng)態(tài)獲取在修改線上產(chǎn)品配置時(shí)極其方便,下面來展示一個(gè)加載動(dòng)態(tài)獲取資源的案例,而不是加載寫死的properties文件信息。
首先構(gòu)造PropertySource,然后將其添加到Enviroment中。
構(gòu)造DynamicLoadPropertySource
package com.wangh.test;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.MapPropertySource;
/**
* 動(dòng)態(tài)加載配置文件
* @ClassName:DynamicLoadPropertySource
* @author:Wh
* @date: 2017年9月14日 下午3:22:54
*/
public class DynamicLoadPropertySource extends MapPropertySource{
private static Logger log = LoggerFactory.getLogger(DynamicLoadPropertySource.class);
private static Map<String, Object> map = new ConcurrentHashMap<String, Object>(64);
private static ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
static {
scheduled.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
map = dynamicLoadMapInfo();
}
}, 1, 10, TimeUnit.SECONDS);
}
/**
* @param name
* @param source
*/
public DynamicLoadPropertySource(String name, Map<String, Object> source) {
super(name, map);
}
@Override
public Object getProperty(String name) {
return map.get(name);
}
/**
* //動(dòng)態(tài)獲取資源信息
* @return
*/
protected static Map<String, Object> dynamicLoadMapInfo() {
return mockMapInfo();
}
/**
* @return
*/
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private static Map<String, Object> mockMapInfo() {
Map<String, Object> map = new HashMap<String, Object>();
map = getProperties();
log.info("data{};currentTime:{}", map.get("spring.datasource.url"), sdf.format(new Date()));
return map;
}
/**
* 獲取配置文件信息
* @return
*/
public static Map<String, Object> getProperties() {
Properties props = new Properties();
Map<String, Object> map = new HashMap<String, Object>();
try {
InputStream in = ClassLoader.getSystemResourceAsStream("pro.properties");
props.load(in);
Enumeration<?> en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String property = props.getProperty(key);
map.put(key, property);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
添加到Enviroment
package com.wangh.test;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.AbstractEnvironment;
/**
* 加載動(dòng)態(tài)配置信息
* @ClassName:DynamicConfig
* @author:Wh
* @date: 2017年9月14日 下午3:38:17
*/
@Configuration
public class DynamicConfig {
//資源信息元數(shù)據(jù):PropertySource包含name和泛型,一份資源信息存在唯一的name以及對(duì)應(yīng)泛型數(shù)據(jù),在這里設(shè)計(jì)為泛型表明可拓展自定.PropertySource在集合中的唯一性只能去看name
public static final String DYNAMIC_CONFIG_NAME = "dynamic_config";
@Autowired
AbstractEnvironment environment;
@PostConstruct
public void init() {
environment.getPropertySources().addFirst(new DynamicLoadPropertySource(DYNAMIC_CONFIG_NAME, null));
}
}
springBoot靜態(tài)資源動(dòng)態(tài)加載
spring.resources.static-locations表示讀取靜態(tài)資源的位置spring.mvc.static-path-pattern表示讀取靜態(tài)資源路徑
舉例說明
spring.resources.static-locations=file:${user.home}/report
spring.mvc.static-path-pattern=/resources/**
spring.http.encoding.force=true添加該配置解決中文亂碼問題- http://localhost:8080/resources/1.html
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot動(dòng)態(tài)加載jar包動(dòng)態(tài)配置實(shí)例詳解
- SpringBoot中的ImportSelector類動(dòng)態(tài)加載bean詳解
- SpringBoot實(shí)現(xiàn)動(dòng)態(tài)加載外部Jar流程詳解
- SpringBoot使用Shiro實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限詳解流程
- Springboot使用@RefreshScope注解實(shí)現(xiàn)配置文件的動(dòng)態(tài)加載
- springboot動(dòng)態(tài)加載Echarts柱狀圖
- Springboot熱加載JAR包的實(shí)現(xiàn)方法
相關(guān)文章
Java遞歸算法詳解(動(dòng)力節(jié)點(diǎn)整理)
Java遞歸算法是基于Java語言實(shí)現(xiàn)的遞歸算法。遞歸算法對(duì)解決一大類問題很有效,它可以使算法簡潔和易于理解。接下來通過本文給大家介紹Java遞歸算法相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧2017-03-03
Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼,需要的朋友可以參考下2018-08-08
詳解Spring Boot 使用slf4j+logback記錄日志配置
本篇文章主要介紹了Spring Boot 使用slf4j+logback記錄日志配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Mybatis調(diào)用SQL?Server存儲(chǔ)過程的實(shí)現(xiàn)示例
在軟件開發(fā)過程中,經(jīng)常會(huì)使用到存儲(chǔ)過程,本文就來介紹一下Mybatis調(diào)用SQL?Server存儲(chǔ)過程的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

