2016-06-10 112 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"); 
相關問題