一尘不染

如何在Spring Boot的嵌入式tomcat中扩展战争?

tomcat

我有一个带有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)。

因此,对我来说,似乎配置有些奇怪,应将其扩展为work / Tomcat / localhost / blog。我怎样才能做到这一点?


阅读 241

收藏
2020-06-16

共1个答案

一尘不染

看来这与spring无关,但与嵌入式雄猫的预期行为有关。我发现了这个相关问题

要求用户为主机的appBase定义有效目录。

因此,只需在部署之前创建默认的appBase目录即可:

tomcat.getHost().getAppBaseFile().mkdir();
tomcat.addWebapp("blog", "/tmp/roller.war");
2020-06-16