-
场景
有一个项目需要加载一个自定义的xml文件。正常情况下,我们把资源文件放到src/main/resources目录下。这样就有一个问题,这里面的资源文件会被一起打包到jar里面。
如果只是spring本身的文件还好说,因为spring boot会加载jar同级目录以及与jar同级的conf目录下的application*.properties文件。而我们的xml文件,不是spring加载的,是我们自己写的解析。
这样发布后,只能从classpath加载,也就是jar包本身里面。现在要求实现类spring这种方式来加载。
先通过下图看看原来的加载方式,直接中classpath中加载,代码量极少。
-
方案
首先我们可以获取到jar本身路径,然后直接从jar路径找xml文件,找不到的时候在找同级的conf目录,还是没有的话,再使用classpath下的xml文件。 这样就可以把配置文件放到jar的外面了。以后有修改,就不需要在重新打包了。
加载资源文件的代码如下:
File file = new File("client-system.xml") // 这里表示从jar同级目录加载
if (!file.exists()) { // 如果同级目录没有,则去config下面找
file = new File("config/client-system.xml");
}
Resource resource = new FileSystemResource(file);
if (!resource.exists()) { //config目录下还是找不到,那就直接用classpath下的
resource = resourceLoader.getResource("classpath:client-system.xml");
}
SAXReader reader = new SAXReader();
Document doc = reader.read(resource.getInputStream());
//.....到此资源文件就可以从三个预选路径中加载了
//.....省略后面的对xml操作等代码
最后配置文件可以如下图方式存放,client-system.xml就是我们的自定义配置文件,
-
编写测试
在加载xml文件的地方加入了打印输出,为了方便直观没有用Logger了,直接使用System.out.println了。代码如下:
-
运行jar包
通过java -jar 来运行打好的jar文件。再看日志输出,与左边的文件进行对比。
第一种方式将xml和资源文件放到jar同级目录;
第二方式将xml放到jar同级的config目录;
第三种方式就是默认方式,从jar内部加载。
每种方式的输出结果请留意控制台中的高亮部分。
END
- 浏览: 53455 次
- 性别:
- 来自: 北京
相关推荐
SpringCloud 集成 ZooKeeper 的方法示例 SpringCloud 作为一个微服务架构下的框架,提供了许多实用的功能和组件,以便于开发者快速构建微服务应用程序。然而,在分布式系统中,服务注册、服务发现、配置管理等问题...
项目介绍 1.用户管理(查询用户、添加用户、修改用户、删除用户、导出...2.1 创建db_warehouse数据库 导入数据库脚本文件(/db_script/db_warehouse.sql) 2.2 修改配置文件application.properties(数据库账号密码及端口)
Java作为一种强大的后端编程语言,经常被用来处理各种类型的数据,包括从Excel文件中提取数据。本篇将深入探讨如何利用Java读取Excel文件内容,并自动根据这些内容在MySQL数据库中创建相应的表。 首先,我们需要...
前后端分离 Spring Booot + Vue 开发单页面应用(二)目的是搭建一个可以复用的模板开发环境介绍JDK1.8Node v8.9.3npm v5.5.1开发工具IDEA(安装Vue.js插件)数据库MySQL 57版本管理工具 Git都是一些基础的开发环境...
AN IMPORTANT class of theoretical and practical problems in communication and control is of a statistical nature.
STM32微控制器通过BOOT0和BOOT1两个引脚的不同状态来确定启动时的加载程序来源。这两个引脚的状态组合决定了STM32芯片在上电或复位后的启动方式。具体来说: 1. **Flash模式**:当BOOT1设置为高电平(1),而BOOT0...
要连接 MySQL 数据库,需要首先加载 MySQL 的 JDBC 驱动程序,然后使用 DriverManager.getConnection() 方法获取连接对象。以下是获取连接对象的代码: ```java public static Connection getConnection(){ String...
u-boot1.1.6版本顶层makefile文件、mkconfig文件、config.mk文件分析,会对执行make ..._config后的过程进行详细分析,看完这个,移植u-boot决定没问题,至少有个好的开始。如果要后面的移植或u-boot2012版本的说明...
vim 文本编辑器使用命令 Vim 文本编辑器是 Linux 中的一款功能强大且广泛使用的...* boot 替换为 booot:%s/boot/booot/g Vim 文本编辑器提供了多种模式和命令,通过这些命令,可以快速高效地编辑和处理文本文件。