问题与背景
在部署的时候,往往部署环境与实际环境有配置的不同,需要改一下外置的配置文件。对于框架中的配置文件,可以很好的进行配置文件外置然后用框架进行读取。但是,基于自己的业务设置的配置文件,一旦打包成jar,就有读取外置和读取jar包中配置文件的问题。
方案与案例
读取jar包外的同目录配置文件
方案是利用java的system对象获得目录,然后指定文件即可。
String content = ""; // 文件中的内容
//尝试读取外置
try {
content = readJsonFile(System.getProperty("user.dir")
+ File.separator
+ "dataResource_out.json");
}catch (IOException exception){
//同文件路径读取
log.debug("dataResource.json外置文件读取失败。"+ exception.getMessage());
}
//读取json文件
private String readJsonFile(String fileName) throws FileNotFoundException {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (FileNotFoundException e) {
throw e;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
读取jar包内配置文件
这里有个坑,就是一旦打包成jar之后,jar内的文件就不再具备文件系统级别的路径了,需要特殊处理一下。
//内置文件
import org.apache.commons.io.IOUtils;
ClassPathResource resource = new ClassPathResource("dataResource_inner.json");
try {
content = IOUtils.toString(resource.getInputStream(), StandardCharsets.UTF_8);
}catch (IOException exception){
log.debug("dataResource_inner.json读取失败!"+exception.getMessage());
}
log.debug("dataResource_inner.json readed");