2016-06-10 5 views
1

У меня есть военный архив с веб-приложением. Я хочу запустить это приложение в моем приложении Spring Boot. Поэтому я последовал совету от that question:Как развернуть войну в вестерн-коттедже 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/ блог]

Это расположение рабочего каталога 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/localhost/blog. Как я могу это сделать?

ответ

3

Кажется, что это связано не с весной, а с ожидаемым поведением встроенного tomcat. Я нашел this related issue:

Пользователь должен определить действительный каталог для базы приложений хоста.

Так просто создать каталог appBase по умолчанию перед развертыванием делает трюк:

tomcat.getHost().getAppBaseFile().mkdir(); 
tomcat.addWebapp("blog", "/tmp/roller.war"); 
Смежные вопросы