如何在Spring Boot's embedded tomcat中扩展war?
How to expand war in Spring Boot's embedded tomcat?
我有一个带有 Web 应用程序的 war 存档。我想在我的 Spring 引导应用程序中启动该应用程序。因此,我听从了 :
的建议
@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);
}
};
}
效果很好,除了 war 没有被提取:
Unable to create the directory [/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
A breakpoint in ExpandWar.expand()
表明它想在 webapps/ 中创建一个目录。这个不存在的 webapps 文件夹取自 Host.getAppBaseFile()
(来自 ContextConfig.context
)。
所以对我来说,它看起来有些配置很奇怪,应该扩展到 work/Tomcat/localhost/blog。我该怎么做?
这似乎与 spring 无关,而是嵌入式 tomcat 的预期行为。我发现 this related issue:
The user is expected to define a valid directory for a Host's appBase.
因此,只需在部署之前创建默认的 appBase 目录即可:
tomcat.getHost().getAppBaseFile().mkdir();
tomcat.addWebapp("blog", "/tmp/roller.war");
我有一个带有 Web 应用程序的 war 存档。我想在我的 Spring 引导应用程序中启动该应用程序。因此,我听从了
@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);
}
};
}
效果很好,除了 war 没有被提取:
Unable to create the directory [/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
A breakpoint in ExpandWar.expand()
表明它想在 webapps/ 中创建一个目录。这个不存在的 webapps 文件夹取自 Host.getAppBaseFile()
(来自 ContextConfig.context
)。
所以对我来说,它看起来有些配置很奇怪,应该扩展到 work/Tomcat/localhost/blog。我该怎么做?
这似乎与 spring 无关,而是嵌入式 tomcat 的预期行为。我发现 this related issue:
The user is expected to define a valid directory for a Host's appBase.
因此,只需在部署之前创建默认的 appBase 目录即可:
tomcat.getHost().getAppBaseFile().mkdir();
tomcat.addWebapp("blog", "/tmp/roller.war");