Как расширить войну во встроенном коте 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");