问题
项目部署在Docker
里运行, 原来使用的基础镜像是tomcat:10.1-jre17
现在需要将tomcat
移除, 所以需要将原来程序从war包的方式修改为jar包.
但是修改完成后, 当程序读文件时出现java.io.FileNotFoundException: file:/xxx!/BOOT-INF/classes!/Fre3of9x.ttf (No such file or directory)
的异常, 确认文件是存在jar包里头的.
原因
后来发现问题出现在下面这一段代码上, 具体就是FileInputStream fis = new FileInputStream(file)
, 原因在于这种获取配置文件的方式无法获取压缩包中的文件.
for (File file : files) {
try (FileInputStream fis = new FileInputStream(file)) {
ZipEntry entry = new ZipEntry(file.getName());
zipOut.putNextEntry(entry);
byte[] buffer = new byte[fis.available()];
if (fis.read(buffer) != -1) {
zipOut.write(buffer);
}
}
}
解决方案
由于不能够修改原代码, 参考 官方文档,可以使用下面的方式,也就是 先解压缩jar包,再启动相应的启动器, 问题解决
jar -xf app.jar
java org.springframework.boot.loader.JarLauncher
官方文档的描述
评论区