Spring Boot的嵌入式tomcat非常方便,无论是开发还是部署。
但是,如果需要添加另一个(第三方) WAR文件(例如,GeoServer),该怎么办?
也许以下是正常的过程:
但是,如果可以进行以下配置,那就太好了。
将Spring boot应用程序构建为独立的Jar,其中包括嵌入式Tomcat.
同时包含Spring boot应用程序内容和另一个WAR内容的文件夹中
怎么做呢?
更新
当spring boot应用程序由fat jar(=可执行jar)组成时,答案中的代码是不够的。修订后的版本如下:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
try {
Context context = tomcat.addWebapp("/foo", "/path/to/foo.war");
WebappLoader loader =
new WebappLoader(Thread.currentThread().getContextClassLoader());
context.setLoader(loader);
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
由于fat jar中的jar文件不能由系统类加载器加载,因此必须指定显式的父类加载器。否则,附加的WAR将无法在添加了WAR的spring引导应用程序的fat jar中加载库jar。
https://stackoverflow.com/questions/31374726
复制相似问题