我有一个docker容器 - Tomcat应用程序(war文件),它的静态内容包含在war文件中。但是出于开发目的,我想将静态内容移出war文件并将其映射到文件系统上的文件夹。这样做的原因很简单。例如,每次javascript文件发生更改时,我都不想重新部署。我想在浏览器中重新加载页面并进行更改。 Tomcat版本是8。
此问题的最常见解决方案(如果你谷歌)是更改server.xml文件并添加类似于此的代码段:
<Context docBase="/my/static/content/folder" path="/some/context" />
但是我想将静态内容映射到我的应用程序的根文件夹。说我的war文件名是myapp.war。它部署在“/ myapp”下。问题是,如果我想从root开始添加静态内容,那么我的上下文代码段如下所示:
<Context docBase="/my/static/content/folder" path="/myapp" />
这是不正确的,因为路径必须是唯一的,并且两者都不能使用“myapp” - 使用war文件名来导出上下文的自动部署以及上面的上下文片段。我可以改变路径指向“myapp / static”但是我需要对我想要避免的源代码应用更改。
如何将外部文件夹映射到我的应用程序根目录非常受欢迎。
答案 0 :(得分:0)
回答我自己的问题...... Context标签应如下所示:
<Context path="/myapp" docBase="myapp.war">
<Resources className="org.apache.catalina.webresources.StandardRoot">
<PreResources className="org.apache.catalina.webresources.DirResourceSet"
base="/my/static/content/folder"
webAppMount="/">
</PreResources>
</Resources>
</Context>
这个解决方案的一个令人不快的副作用是我的服务器启动时间从~22秒上升到~52秒。 我的&#34; / my / static / content /文件夹&#34;共有97件商品,尺码为13.7MB。
反馈如何改进这一点或欢迎没有如此大启动时间的替代解决方案。
更新: 从PreResources切换到PostResources解决了问题的启动时间。它从~52秒回到~26秒。现在开销只有4秒,这对我来说已经足够了。
更新2:在我的原始帖子中,我提到应将Context标签添加到server.xml。这可以工作,但更好,更清晰的添加方法是创建一个context.xml文件并将其放在WAR文件中的META-INF下。这样改变只在WAR文件中,服务器(分别是Docker镜像)是相同的,无论它是否用于开发。