Java使用ClassLoader读取外部json文件

news2024/11/26 8:26:21

我们有时候会遇到这样一种业务场景:某个对象是变化的,在不同项目的部署中,可能需要更改对象中的某个属性,这时如果我们将该对象写在代码里,这样不仅寻找不便,部署后也不能随便修改(修改后又要重新打包),这就需要将该对象解耦,单独抽离出来,做成一个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9个面试模板:招聘经理的问题和指南

有效的面试让我们更好的提升招聘效率,招聘经理和招聘人员可以使用面试模板确保高效快捷地进行面试。 面试模板有助于构建面试流程,为向候选人提问和记录他们的答案创建一个一致的框架。支持不同公司自定义面试模版,面试模版还可以更轻松地对…

Win10开始菜单打不开怎么办?Win10开始菜单打不开解决方法

Win10开始菜单打不开怎么办?当用户在Win10系统上遇到开始菜单打不开的问题时,可能会导致无法方便地访问和运行应用程序、设置等功能,这时候用户可以重启一下Win10电脑的任务管理器来解决问题,以下就是Win10开始菜单打不开解决方法…

撕去“械字号”标签,敷尔佳靠营销还能走多远?

回顾刚刚过去的六月,美妆护肤板块回暖趋势继续保持。 据数据显示,6 月淘系、抖音合计美妆GMV同比增长约13%,其中,护肤、彩妆分别同比增长14%、11%。而据美加漾科技披露的《2023年618护肤市场大数据调研》显示,护肤品市…

一键安装docker及docker-compose

1、创建docker存放相关文件目录,该目录可自己定义。2、添加相关文件,可在网盘提取。其中docker-20.10.9.tgz和docker-compose为安装包,也可根据需要在网上下载,注意docker-compose安装包下载后需要改名为docker-compose。 链接&am…

【正点原子STM32连载】第五十一章 汉字显示实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第五…

【Kafka】Kafka基础概念笔记

【Kafka】Kafka基础概念笔记 文章目录 【Kafka】Kafka基础概念笔记1. 两种模式1.1 点对点模式1.2 发布/订阅模式 2. 基础架构3. Topic命令行操作3.1 查看 Topic 操作3.2 创建 Topic3.3 查看所有 Topic3.4 查看 Topic 的详情3.5 修改分区数3.6 删除 Topic 4. 生产者命令行操作4.…

统一参数校验

使用注解,统一参数校验 我们在实际的开发过程中经常会遇到需要对参数进行校验的情况,比如在需要用户输入手机号的时候他是不是真的输入了一个合法的手机号,在需要用户输入一个邮箱的时候他是不是真的输入了一个合法的邮箱,用户输…

可以在手机做笔记的app哪一款比较好用?

在这个信息爆炸的时代,人们需要快速有效地记录和整理信息。随着智能手机的普及,越来越多的人选择在手机上做笔记,相对于纸笔记录,手机笔记app的好处更多。 一款优秀的笔记app可以帮助我们进行内容整理,我们可以将笔记…

Mysql8.0下载及安装步骤完整教程

1.首先去官网下载Mysql8.0压缩包 官网地址:MySQL :: Download MySQL Community Server 文件下载后解压到D盘,具体路径可以根据自己习惯。 我解压的具体位置:D:\Program Files 2.创建配置文件my.ini 在和bin同级目录创建文件 my.ini&#x…

FuLLGC模拟及结果流程

内存泄漏、内存溢出、CPU飙升三者之间的关系 内存泄露可能会导致内存溢出。 内存溢出会抛出异常,内存泄露不会抛出异常,大多数时候程序看起来是正常运行的。 内存泄露的程序,JVM频繁进行FullGC尝试释放内存空间,进而会导致CPU飙升…

能流畅运行OctaneRender 的硬件建议

OctaneRender 是一个完全基于 GPU 的渲染引擎。这意味着系统中的显卡(或 GPU)会影响渲染完成所需的时间,而不是 CPU。 处理器(CPU) 在 OctaneRender 以及大多数其他基于 GPU 的引擎中,CPU 在渲染场景的过程…

Flutter流式组件Wrap

Wrap组件类似Row组件都是横向依次排列,唯一的区别就是Wrap能自动换行。 主要代码: Wrap(spacing: 10, //左右间距runSpacing: 10, //上下间距// direction: Axis.vertical,//主轴的方向,默认横向// alignment: WrapAlignment.spaceBetween, …

【Element】Tree 树形控件

使用el-tree完成下拉框单选功能 <label class"handle-label">部门:</label> <el-select v-model"bm" ref"selectTree" class"wd150" placeholder"请选择" clearable clear"handleTreeClear">…

Aop基于xml和注解应用

基于 XML 的 AOP 开发 问题1&#xff1a;在通知方法中如何定义切入点表达式&#xff1f; 问题2&#xff1a;如何配置切面&#xff1f; 问题3&#xff1a;在配置类上如何开启AOP注解功能&#xff1f; 1.1 快速入门 ①导入 AOP 相关坐标 ②创建目标接口和目标类&#xff08…

linux环境安装docker+confluence

前言 本次安装的环境 centos 7.6 一、安装docker 1、yum安装docker 更新yum yum update yum安装docker yum install docker 2、开启镜像加速 mkdir /etc/docker vi /etc/docker/daemon.json 3、启动docker 查看docker版本 docker --version 启动docker service docker s…

ps 2023(24.7beta) mac

Photoshop 2023 beta,一款专业图像处理软件&#xff0c;它主要用于图像编辑、合成和设计等方面。Photoshop beta创新式填充是Adobe Photoshop的一项新功能&#xff0c;它可以自动识别和删除照片中的对象并用周围的图像填充空白部分。这个新功能使用了人工智能和机器学习技术&am…

直线模组在新能源汽车中的应用

发展新能源汽车是我国从汽车大国迈向汽车强国的必由之路&#xff0c;是应对气候变化、推动绿色发展的战略举措&#xff0c;新能源汽车免征车辆购置税政策的延续&#xff0c;能够稳定促进新能源汽车发展&#xff0c;加速新能源车对于燃油车的全面替代。 直线模组技术的飞速发展&…

Doris实战篇-准实时数仓架构设计与实现

前言 这是一篇Doris数据仓库架构随笔&#xff0c;会应用到一些优秀的用户案例和自己的见解&#xff0c;欢迎大家留言评论。 前景回顾 下图是之前文章有提到过的数仓架构&#xff0c;这种架构的好处是实时强&#xff0c;数据产生以后&#xff0c;直接可以消费到&#xff0c;而…

【网络安全】带你了解【黑客】

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 引言 1. 定义 2. 分类 a. 白帽黑客&#xff08;White Hat Hacker&#xff09; b. 黑帽黑客&#xff08;Black Hat Hacker&#xff09; c. 灰帽黑客&#xff08;Gray Hat Hacker…

【Docker】Docker中 AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…