2016-06-10 85 views
1

我有一个Web应用程序的战争档案。我想在我的Spring Boot应用程序中启动该应用程序。所以我也跟着从that question建议:如何在Spring Boot的嵌入式tomcat中扩展战争?

@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/博客]

这是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 

A breakpoint in ExpandWar.expand()表示它想要在webapps /中创建一个目录。这个不存在的webapps文件夹取自Host.getAppBaseFile()(来自ContextConfig.context)。

对我来说,它看起来像是奇怪的配置,它应该扩展到工作/ Tomcat /本地主机/博客。我怎样才能做到这一点?

回答

3

看起来这不是弹簧相关的,而是嵌入式tomcat的预期行为。我发现this related issue

用户需要为主机的appBase定义一个有效的目录。

所以,简单地创建默认的appBase目录部署的伎俩面前:

tomcat.getHost().getAppBaseFile().mkdir(); 
tomcat.addWebapp("blog", "/tmp/roller.war"); 
相关问题