我有一个带有Web应用程序的战争档案。我想在我的Spring Boot应用程序中启动该应用程序。因此,我遵循了该问题的建议:
@Bean public EmbeddedServletContainerFactory servletContainerFactory() { return new TomcatEmbeddedServletContainerFactory() { @Override protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) { try { tomcat.addWebapp("blog", "/tmp/roller.war"); } catch (ServletException ex) { throw new IllegalStateException("Failed to add webapp", ex); } return super.getTomcatEmbeddedServletContainer(tomcat); } }; }
效果很好,只是战争没有得到解决:
无法创建目录[/tmp/tomcat.9153500015669016883.8080/webapps/blog]
那是tomcat工作目录的布局:
$ find /tmp/tomcat.9153500015669016883.8080/ /tmp/tomcat.9153500015669016883.8080/ /tmp/tomcat.9153500015669016883.8080/work /tmp/tomcat.9153500015669016883.8080/work/Tomcat /tmp/tomcat.9153500015669016883.8080/work/Tomcat/localhost /tmp/tomcat.9153500015669016883.8080/work/Tomcat/localhost/blog /tmp/tomcat.9153500015669016883.8080/work/Tomcat/localhost/ROOT
一个在断点ExpandWar.expand() reveils,它要创建的webapps目录/。此不存在的webapps文件夹来自Host.getAppBaseFile()(来自ContextConfig.context)。
ExpandWar.expand()
Host.getAppBaseFile()
ContextConfig.context
因此,对我来说,似乎配置有些奇怪,应将其扩展为work / Tomcat / localhost / blog。我怎样才能做到这一点?
看来这与spring无关,但与嵌入式雄猫的预期行为有关。我发现了这个相关问题:
要求用户为主机的appBase定义有效目录。
因此,只需在部署之前创建默认的appBase目录即可:
tomcat.getHost().getAppBaseFile().mkdir(); tomcat.addWebapp("blog", "/tmp/roller.war");