Spring boot 打包jar后无法读取resource下的配置文件

在开发的spring boot项目中,需要读取一个*.conf文件。

在idea中运行项目不报任何错误,打包jar后报找不到文件的异常。

原因:jar是一个压缩包,jar包中的文件在磁盘中是没有真实路径的,因此找不到代码中的路径文件。

解决思路:通过文件流的读取方式,代码中将*.conf文件拷贝至jar外的临时文件夹下,然后再读取临时文件夹下的*.conf文件。

核心代码:

 1 public TrackerClient getTrackerClient(){
 2         InputStream in=null;
 3         OutputStream os=null;
 4         try{
 5             //将文件转化为输入流的形式
 6             ClassPathResource classPathResource = new ClassPathResource("fastdfs/fdfs_client.conf");
 7             in=classPathResource.getInputStream();
 8             //项目打包成jar包所在的根路径
 9             String rootPath = System.getProperty("user.dir");
10             String tempPath=rootPath+ File.separator +"fdfs_client.conf";
11             log.info("fdfs_client.conf*****************"+tempPath+"******************");
12             //将文件复制到这个路径
13             os=new FileOutputStream(tempPath);
14             byte[] flush = new byte[1024];
15             int len = -1;
16             // 边读边写
17             while ((len = in.read(flush)) != -1) {
18                 os.write(flush, 0, len);
19             }
20             ClientGlobal.init(tempPath);
21             // 创建一个TrackerClient对象。
22             TrackerClient trackerClient = new TrackerClient();
23             return  trackerClient;
24         }catch (Exception e){
25             log.info("###获取TrackerClient异常!###",e);
26             return null;
27         }finally {
28             if(in!=null){
29                 try {
30                     in.close();
31                 } catch (IOException e) {
32                     log.error("###文件关闭失败!###",e);
33                 }
34             }
35             if(os!=null){
36                 try {
37                     os.close();
38                 } catch (IOException e) {
39                     log.error("###文件关闭失败!###",e);
40                 }
41             }
42         }
43     }

 

posted @ 2020-10-22 20:04  风中的摇坠  阅读(2842)  评论(0编辑  收藏  举报