我们有时候会遇到这样一种业务场景:某个对象是变化的,在不同项目的部署中,可能需要更改对象中的某个属性,这时如果我们将该对象写在代码里,这样不仅寻找不便,部署后也不能随便修改(修改后又要重新打包),这就需要将该对象解耦,单独抽离出来,做成一个json文件,放在resource中,这样即使项目上线后,我们也能随时改变,只需要重启即可。
读取逻辑如下图所示:
我们将该对象写成json格式,放在resources下的outside包中,内部是标准的json格式文件(略)。
读取对象类为OutSideRead,我们使用ClassLoader方式读取:
@Component
public class OutSideRead {
// 直接从配置文件读取路径
@Value("${outside.path}")
private String path;
public JSONObject getHumanDetail() {
BufferedReader reader = null;
// 使用ClassLoader方式读取
InputStream inputStream = OutSideRead.class.getResourceAsStream(path);
reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder content = new StringBuilder();
String line = null;
try {
line = reader.readLine();
while (!StringUtils.isEmpty(line)) {
content.append(line);
line = reader.readLine();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
String jsonString = content.toString();
JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
return jsonObject;
}
}
为了进一步解耦,文件路径我们直接写在配置文件里,getResourceAsStream指定加载的资源路径与当前类所在包的路径一致,加入了‘/’后就会从classpath的根路径下开始查找。
outside.path = /outside/human.json