如何获取springboot打成jar后的classpath

 更新时间:2023年07月21日 15:16:30   作者:琴瑟裹腹  
这篇文章主要介绍了如何获取springboot打成jar后的classpath问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

获取springboot打成jar后的classpath

项目需要另一个子项目Utils的一个util工具类,在A项目的maven中加入了该子项目

<dependency>
            <groupId>com.supconit.data.algorithm.platform</groupId>
            <artifactId>data_algorithm_util</artifactId>
            <version>1.1.00.190408-SNAPSHOT</version>
</dependency>

但是该工具类的执行依赖一个conf文件,把子项目Utils打成jar包后,发布到linux平台上,发现无法读取该配置文件

报错如下:

java.io.FileNotFoundException: class path resource [fdfs_client.conf] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/home/data_algorithm/data_algorithm_executor-1.1.00.190408-SNAPSHOT.jar!/BOOT-INF/lib/data_algorithm_util-1.1.00.190408-SNAPSHOT.jar!/fdfs_client.conf

修改之前的代码

 String path  = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
 ClientGlobal.init(path);

修改之后的代码

 ClassPathResource classPathResource = new ClassPathResource("fdfs_client.conf");
            //创建临时文件,将fdfs_client.conf的值赋值到临时文件中,创建这个临时文件的原因是springboot打成jar后无法获取classpath下文件
            String tempPath =System.getProperty("java.io.tmpdir") + System.currentTimeMillis()+".conf";
            File f = new File(tempPath);
            IOUtils.copy(classPathResource.getInputStream(),new FileOutputStream(f));
            ClientGlobal.init(f.getAbsolutePath());

发布之后,问题解决,原因是因为打包后Spring试图访问文件系统路径,但无法访问JAR中的路径,因此必须使用resource.getInputStream()。

springboot打成jar后获取classpath下文件异常解决

写了一个工具类,要读取classpath下的文件,使用

Resource resource = new ClassPathResource(filePath);
File file = resource.getFile();

在本地测试,没发现问题,但是将项目打包成jar包后运行,发现报错

Caused by: java.io.FileNotFoundException: class path resource [test.txt] cannot be resolved to absolute file path because it does not reside in the file system: j

原因

打包后Spring试图访问文件系统路径,但无法访问JAR中的路径。

解决

Resource resource = new ClassPathResource(filePath);
InputStream inputStream = resource.getInputStream();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springBoot动态加载jar及如何将类注册到IOC

    springBoot动态加载jar及如何将类注册到IOC

    在SpringBoot项目中动态加载jar文件并将其类注册到IOC容器是一种高级应用方式,,这种方法为SpringBoot项目提供了更灵活的扩展能力,使得项目可以在不修改原有代码的基础上增加新的功能模块,感兴趣的朋友一起看看吧
    2024-11-11
  • Java Cloneable接口的深拷贝与浅拷贝详解

    Java Cloneable接口的深拷贝与浅拷贝详解

    这篇文章主要为大家详细介绍了Java Cloneable接口的深拷贝与浅拷贝,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 面试初级Java开发问到Arrays

    面试初级Java开发问到Arrays

    这篇文章主要介绍了Java Arrays工具类用法,结合实例形式分析了java Arrays工具类针对数组元素修改、复制、排序等操作使用技巧与相关注意事项,需要的朋友可以参考下
    2021-07-07
  • SpringBoot实现权限验证的示例步骤

    SpringBoot实现权限验证的示例步骤

    权限验证是一种用于控制对系统资源和操作的访问的机制。它允许开发人员定义谁可以执行特定操作或访问特定资源,并确保只有经过授权的用户才能执行这些操作,这篇文章主要介绍了SpringBoot实现权限验证,需要的朋友可以参考下
    2023-08-08
  • spring boot项目打包成war在tomcat运行的全步骤

    spring boot项目打包成war在tomcat运行的全步骤

    这篇文章主要给大家介绍了关于spring boot项目打包成war在tomcat运行的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Java实现一个小说采集程序的简单实例

    Java实现一个小说采集程序的简单实例

    下面小编就为大家带来一篇Java实现一个小说采集程序的简单实例。小编觉得挺不错的, 现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java中对象都是分配在堆上吗?你错了!

    Java中对象都是分配在堆上吗?你错了!

    这篇文章主要介绍了Java中对象都是分配在堆上吗?你错了!文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java如何从List中删除元素的正确用法举例

    Java如何从List中删除元素的正确用法举例

    这篇文章主要给大家介绍了关于Java如何从List中删除元素的正确用法, 列表List是Java中的一种数据结构,存放按照添加顺序的元素,是个有序的集合,需要的朋友可以参考下
    2023-07-07
  • springboot集成druid,多数据源可视化,p6spy问题

    springboot集成druid,多数据源可视化,p6spy问题

    这篇文章主要介绍了springboot集成druid,多数据源可视化,p6spy问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java Shutdown Hook场景使用及源码分析

    Java Shutdown Hook场景使用及源码分析

    shutdown hook 就是一个简单的已初始化但是未启动的线程,本文详细的介绍了Java Shutdown Hook场景使用及源码分析,感兴趣的朋友可以参考一下
    2021-06-06

最新评论