Java使用ClassLoader读取外部json文件

我们有时候会遇到这样一种业务场景:某个对象是变化的,在不同项目的部署中,可能需要更改对象中的某个属性,这时如果我们将该对象写在代码里,这样不仅寻找不便,部署后也不能随便修改(修改后又要重新打包),这就需要将该对象解耦,单独抽离出来,做成一个json文件,放在resource中,这样即使项目上线后,我们也能随时改变,只需要重启即可。
读取逻辑如下图所示:
Java使用ClassLoader读取外部json文件_第1张图片
我们将该对象写成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

你可能感兴趣的:(Java,java,json,开发语言,spring,spring,boot)