Tomcat重新部署WAR包时是否会清空项目图片文件夹?能否避免?
Tomcat替换WAR包时项目内上传目录的留存问题
一、默认情况下会清空该图片文件夹
Tomcat部署WAR包的默认逻辑是:每次更新WAR包时,会先删掉webapps目录下对应项目的解压文件夹,再重新解压新的WAR包。你存图片的./myeditor/uploadimg属于项目解压目录里的子文件夹,旧图片会跟着原有解压目录被彻底删除——如果新WAR包里没包含这些旧图,替换后这个文件夹就是空的。
二、避免图片被清空的两种方法
方法1:把上传目录移到项目外部(最佳实践)
这是业内最常用的靠谱方案,核心是把用户上传的静态资源和应用代码分开:
- 第一步:修改富文本编辑器的配置,把图片存储路径改成Tomcat
webapps目录之外的独立路径,比如/opt/tomcat-uploads/myeditor/uploadimg(根据你的服务器系统调整具体路径)。 - 第二步:在Tomcat里配置虚拟路径映射,让项目能访问这个外部目录:
打开Tomcat的conf/server.xml,找到<Host>标签,添加一段配置:
更推荐的做法是在项目的<Context docBase="/opt/tomcat-uploads/myeditor/uploadimg" path="/你的项目名称/myeditor/uploadimg" reloadable="false"/>META-INF/context.xml里加这段配置,避免修改全局配置影响其他项目。
这样不管怎么替换WAR包,外部目录里的图片都不会被Tomcat触动,项目也能正常访问这些图片。
方法2:修改Tomcat部署行为(不推荐)
这种方式是让Tomcat不删除原有解压目录,但容易导致新旧代码混合、缓存冲突等问题,只适合临时应急:
- 打开Tomcat的
conf/context.xml,在<Context>标签里添加两个属性:
同时要确保<Context antiResourceLocking="false" antiJARLocking="false" reloadable="false">conf/server.xml里<Host>标签的autoDeploy和deployOnStartup设为false,防止Tomcat自动重新部署覆盖文件。
注意:生产环境别用这种方法,很容易出莫名其妙的问题。
内容的提问来源于stack exchange,提问作者kk luo
相关产品推荐
相关产品推荐

