說明
我們?cè)谶\(yùn)行一個(gè)系統(tǒng)時(shí),不可避免的要加載一些常用的數(shù)據(jù)师郑,如默認(rèn)用戶环葵,各種數(shù)據(jù)枚舉等。
現(xiàn)在流行的方式為配置一個(gè)json文件宝冕,此json文件可以放在外部系統(tǒng)讀取张遭,也可以放入src/main/resources下,讀取的順序可以和 application.yml 文件一樣猬仁。加載優(yōu)先級(jí):外部同級(jí)目錄 > 外部config目錄 > 內(nèi)部 resources下同級(jí)目錄 > 內(nèi)部 resources下config目錄。
其實(shí)是一段函數(shù)控制的:
private static File getResFile(String filename) throws FileNotFoundException {
File file = new File(filename);
if (!file.exists()) { // 如果同級(jí)目錄沒有先誉,則去config下面找
log.debug("不在同級(jí)目錄湿刽,進(jìn)入config目錄查找");
file = new File("config/"+filename);
}
Resource resource = new FileSystemResource(file);
if (!resource.exists()) { //config目錄下還是找不到,那就直接用classpath下的
log.debug("不在config目錄褐耳,進(jìn)入classpath目錄查找");
file = ResourceUtils.getFile("classpath:"+filename);
}
return file;
}
那么具體的實(shí)現(xiàn)json文件的解析類诈闺,就是:
外部依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
JSONHelper.java
@Slf4j
public class JSONHelper {
/* public static void main(String[] args) {
// String s =ResolveJsonFileToString("node.json");
// System.out.println("sss="+s);
// Map map = (Map) ResolveJsonFileToObject("node.json");
// System.out.println("map="+map.get("res"));
}
*/
/**
* 將文件流轉(zhuǎn)為json對(duì)象,文件存放路徑與配置文件路徑規(guī)范一致
* @param
* @return
* @throws
*/
public static Object ResolveJsonFileToObject(String filename){
String str= ResolveJsonFileToString(filename);
JSONObject jo = JSONObject.parseObject(str);
return jo;
}
/**
* 通過文件名獲取獲取json格式字符串铃芦,
* @param filename 文件存放路徑與配置文件路徑規(guī)范一致
* @return ResolveJsonFileToString
* @throws
*/
public static String ResolveJsonFileToString(String filename){
BufferedReader br = null;
String result = null;
try {
// br = new BufferedReader(new InputStreamReader(getInputStream(path)));
br = new BufferedReader(new InputStreamReader(getResFileStream(filename),"UTF-8"));
StringBuffer message=new StringBuffer();
String line = null;
while((line = br.readLine()) != null) {
message.append(line);
}
if (br != null) {
br.close();
}
String defaultString=message.toString();
result=defaultString.replace("\r\n", "").replaceAll(" +", "");
log.info("result={}",result);
} catch (IOException e) {
try {
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream in = classloader.getResourceAsStream(filename);
br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
StringBuffer message=new StringBuffer();
String line = null;
while((line = br.readLine()) != null) {
message.append(line);
}
if (br != null) {
br.close();
}
if (in != null){
in.close();
}
String defaultString=message.toString();
result=defaultString.replace("\r\n", "").replaceAll(" +", "");
log.debug("for jar result={}",result);
}catch (Exception e1){
e1.printStackTrace();
}
}
return result;
}
private static File getResFile(String filename) throws FileNotFoundException {
File file = new File(filename);
if (!file.exists()) { // 如果同級(jí)目錄沒有雅镊,則去config下面找
log.debug("不在同級(jí)目錄,進(jìn)入config目錄查找");
file = new File("config/"+filename);
}
Resource resource = new FileSystemResource(file);
if (!resource.exists()) { //config目錄下還是找不到刃滓,那就直接用classpath下的
log.debug("不在config目錄仁烹,進(jìn)入classpath目錄查找");
file = ResourceUtils.getFile("classpath:"+filename);
}
return file;
}
/**
* 通過文件名獲取classpath路徑下的文件流
* @param
* @return
* @throws
*/
private static FileInputStream getResFileStream(String filename) throws FileNotFoundException {
FileInputStream fin = null;
File file = getResFile(filename);
log.info("getResFile path={}",file);
fin = new FileInputStream(file);
return fin;
}
}
更多,請(qǐng)關(guān)注:
springboot 技術(shù)實(shí)踐總結(jié)