当前位置:   article > 正文

Docker容器获取外部文件参考_docker中jar包外部的资源文件

docker中jar包外部的资源文件

容器中获取文件参考

如果项目中需要用到操作文件,文件又放在项目的resource下面,通过

  Resource resource = new ClassPathResource("templates/template.pdf");  
  File file = resource.getFile();  
  • 1
  • 2

这种方式在编辑器中能成功,但是打成jar包之后就报错了,是因为灵雀云上的容器内部是jar包运行,jar包没有绝对路径,所有报错,下面给出两种解决方案:

方案1(推荐)

将需要操作的文件添加到docker容器中,然后jar包项目从docker容器中读取,容器内部就是一台Linux虚拟机
步骤1:修改Dockerfile文件,例如添加两个excel文件

FROM micserver.node1/base/jdk8:152b16_alpine
VOLUME /tmp
ADD ./elk-0.0.1-SNAPSHOT.jar /app/
ADD ./template.pdf /app/
CMD ["sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app/elk-0.0.1-SNAPSHOT.jar ${RUN_ARGS}"]
EXPOSE 9996
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中

ADD ./template.pdf /app/
  • 1

是将文件添加到容器中,并且放在/app/目录下,代码获取文件的地址是:
/app/template.pdf,并且可以配置到配置中心

checkTemplatePath : /app/template.pdf
  • 1

再通过

    @Value("${checkTemplatePath}")
    private String checkTemplatePath;
  • 1
  • 2

这种方式获取

File templateFile = new File(checkTemplatePath);
  • 1

就能获取到要操作的文件了

方案2

可以把要操作的文件转化成流,再把流转化成文件,这样也能获取目标文件名,此操作涉及到文件流的转化,打开与关闭
代码如下:

InputStream templateInputStream = getClass()
                                   .getClassLoader()
                                   .getResourceAsStream(checkTemplatePath);
String templateSavePath = fileTempPath + "/template.pdf";  //复制的模板保存地址
FileUtils.copyInputStreamToFile(templateInputStream,new File(templateSavePath));
InputStream ruleInputStream = getClass()
                                  .getClassLoader()
                                  .getResourceAsStream(checkRulePath);
String ruleSavePath = fileTempPath + "/template.pdf"; //复制的规则保存地址
 File ruleFile = new File(ruleSavePath);
 FileUtils.copyInputStreamToFile(ruleInputStream,ruleFile);
  try{
      if (templateInputStream != null){
        templateInputStream.close();
      }
      if (ruleInputStream != null){
         ruleInputStream.close();
      }
     }catch(Exception e){
       e.printStackTrace();
     }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

这种方案也能达到目的,但需要关闭文件流

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/284225
推荐阅读
相关标签
  

闽ICP备14008679号