Tomcat 8.5/9修改web应用软链接后context无法自动重载解决方案咨询
问题根因
Tomcat 8.5.x及后续的9.x、10.x版本默认新增了linkResolveOnce配置项,默认值为true,作用是Context首次启动时一次性解析软链接对应的真实路径并缓存,后续Context重载时不会重新解析软链接,只会读取缓存的旧路径,因此修改软链接删除旧目录后,重载时就会抛出旧路径无效的报错。
修复配置
你可以通过修改Context配置恢复8.0.x版本的自动重新解析软链接逻辑,两种配置方式二选一即可:
方式1:全局配置(对所有Web应用生效)
编辑Tomcat安装目录下的conf/context.xml,调整
<Context> <!-- 原有其他配置保持不变 --> <Resources allowLinking="true" linkResolveOnce="false" /> </Context>
方式2:单应用配置(仅对指定应用生效)
编辑对应应用的Context配置文件(通常为conf/Catalina/localhost/app1.xml,不存在可手动新建),内容如下:
<Context docBase="/usr/local/tomcat/webapps/app1"> <Resources allowLinking="true" linkResolveOnce="false" /> </Context>
注意事项
- 修改配置后需要重启一次Tomcat使配置生效,后续再更新软链接就会自动触发Context重载,自动读取新的软链接指向路径,无需再次重启Tomcat。
- 关闭
linkResolveOnce仅会略微增加Context重载时的路径解析开销,常规业务场景下几乎无性能感知,生产环境可正常使用。
内容的提问来源于stack exchange,提问作者Igor Orlov
相关产品推荐
相关产品推荐

