背景描述:
有一个Springboot 的单体项目,前端使用theamleaf 写了一些动态页面+Wangeditor实现了富文本编辑器,后端使用springboot的ModelAndView做了页面的渲染和接收;
部署情况:
我采用docker 进行远程image部署
问题:
图片上传功能在本地可以正常使用, 经查,服务器中没有出现新上传的文件
1 | docker exec -it 9af5acbb5718 /bin/bash #进入容器 |
1 | docker logs 9af5acbb5718 # 查看jar包日志 |
本地功能正常:
原因分析:
- 优先考虑跨域 – 没传成功
- 那个地址很奇怪。。。 是否是因为docker 的原因?
解决:
尝试去将静态资源放到 jar包的外面
但是这个时候我并没有意识到, upload 目录无法被springboot 作为静态资源映射到;
其实也是导致下面 upload unknowhost 的原因;
但是当时并没有意识到
又遇到新的问题:
1 | 09-25 17:55:33.419 [http-nio-81-exec-9] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception |
最终的解决方案:
step 1
将外部的upload 的直接修改为静态资源映射即可
1 | # 数据源 |
step 2
采用通用的 图片url上传到服务器的可访问路径即可
解决思路:
本次的修改bug还是采用了之前一直认为比较好用的方法,对于比较冗余的项目,利用ai 将其中的有问题/关键的 function 单独领出来 ,然后做更细粒度的测试,最后迁移成功通过测试的代码到整体的项目中,就可以让项目起死回生了。
本次抽离主要是以图片上传为主:
https://chatgpt.com/share/66f543dc-07bc-8003-a264-5e2372420028
需要注意的点:
- Jar 包部署后,无法进行jar包内的写入操作;本质上是一个压缩包
- uuid 的使用,以及弊端(可以使用id来进行删除)
- springboot的 静态资源映射的方法;由于是单体项目,前端需要依赖后段进行页面跳转和请求转发,本质上还是tomcat 的web目录+一些映射