zoukankan      html  css  js  c++  java
  • SpringBoot项目打包成jar后,使用ClassPathResource获取classpath下文件失败

    SpringBoot项目打包成jar后读取文件的大坑,使用ClassPathResource获取classpath下文件失败

    在项目中使用ClassPathResource中获取资源文件,在本地环境可以正常访问获取到文件,然后打包部署到测试环境后却报错不能找到给资源文件,报错信息如下:

    image-20211227131153028

    解决方法:使用PathMatchingResourcePatternResolver获取资源文件,不使用classPathResource

    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
          org.springframework.core.io.Resource[] resources = resolver.getResources("/static/signature.png");
          InputStream inputStream = resources[0].getInputStream();
    	//file文件转换成MultipartFile文件
          MultipartFile multipartFile = new MockMultipartFile("file", "signature.png", "text/plain", IOUtils.toByteArray(inputStream));
    
    

    原因:

    image-20211227131904968

    因为resourceUrl.getProtocol()不是file,而是 jar,这样就抛出了一个FileNotFoundException异常。

    ResouceUtils.getFile()是专门用来加载非压缩和Jar包文件类型的资源,所以它根本不会去尝试加载Jar中的文件,要想加载Jar中的文件,只要用可以读取jar中文件的方式加载即可,比如 xx.class.getClassLoader().getResouceAsStream()这种以流的形式读取文件的方式,所以使用读取文件流就可以拿到了。

    参考文档:https://www.renfei.net/posts/1003293

  • 相关阅读:
    hive表增量抽取到oracle数据库的通用程序(二)
    java进程的守护进程脚本
    hadoop2.7节点的动态增加与删除
    hive表增量抽取到oracle数据库的通用程序(一)
    arduino 驱动电调
    arduino IO口
    通过电机编码器AB相输出确定电机转向
    Wifi小车资料
    winform 按键控制
    vs2010 EF4.0 访问mysql
  • 原文地址:https://www.cnblogs.com/seanRay/p/15735879.html
Copyright © 2011-2022 走看看