Как расширить войну во встроенном коте Spring Boot?

У меня есть военный архив с веб-приложением. Я хочу запустить это приложение в моем приложении 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() обнаруживает, что хочет создать каталог в webapps /. Эта несуществующая папка веб-приложений взята из Host.getAppBaseFile() (который исходит от ContextConfig.context).

Так что для меня это выглядит так, будто что-то странно настроено и должно быть расширено до работы /Tomcat/localhost/blog. Как я могу это сделать?

1 ответ

Решение

Кажется, что это связано не с пружиной, а с ожидаемым поведением встроенного кота. Я нашел эту связанную проблему:

Ожидается, что пользователь определит допустимый каталог для appBase хоста.

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

tomcat.getHost().getAppBaseFile().mkdir();
tomcat.addWebapp("blog", "/tmp/roller.war");
Другие вопросы по тегам