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 }