最近遇到个文件下载的问题,在开发环境好好的,测试环境就不行404。查了接近两天才解决。整个思路做个记载。
问题描述:通过视图解析器下载项目中的静态资源文件模板。也就是sringboot的resource目录下的文件。开发环境下载正常,测试环境下载404.
首先排除业务代码的问题。因为有环境能成功,在思考是不是jdk版本导致。本地用jdk11试了下,好像真有点出入。发现类加载器变化了。
再去看看测试环境的类加载器。发现类加载又是另一个。这就要搞懂这三个加载器是什么时候去加载,为什么会不一致。
下面贴一段解释
这就比较明确了,是因为启动方式不同导致的问题。jdk8和jdk11内置的类加载是项目以war包形式启动会使用。而spirngboot那个是以jar包启动才会使用。于是本地采用java -jar的方式进行启动,结果本地还真复现了。也出现了404的问题。
那么顺着日志去找源码。发现是isFile里面竟然没考虑jar包方式启动的场景,那么只能在外层做一次封装。
这样就解决了。只是兼容一下jar包启动的方式。