Spring Boot的嵌入式tomcat非常便于开发和部署。
但是,如果应该添加另一个(第三方)WAR文件(例如GeoServer)怎么办?
也许以下是正常过程:
但是,如果可以进行以下配置,那就太好了。
怎么做到呢?
更新
当Spring Boot应用程序由胖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);
}
};
}
由于胖jar中的jar文件无法由系统类加载器加载,因此必须指定一个显式的父类加载器。否则,附加的WAR无法将库jar加载到添加了WAR的Spring Boot应用程序的胖jar中。
你可以使用将war文件添加到嵌入式Tomcat Tomcat.addWebapp
。就像它的javadoc所说的那样,它是“相当于将Web应用程序添加到Tomcat的Web应用程序目录中”。要在Spring Boot中使用此API,你需要使用一个自定义TomcatEmbeddedServletContainerFactory
子类:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
// Ensure that the webapps directory exists
new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs();
try {
Context context = tomcat.addWebapp("/foo", "/path/to/foo.war");
// Allow the webapp to load classes from your fat jar
context.setParentClassLoader(getClass().getClassLoader());
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
Spring Boot的嵌入式tomcat对于开发和部署都非常方便。 但是,如果应该添加另一个(第三方)WAR文件(例如,GeoServer)怎么办? 安装普通Tomcat服务器。 将Spring Boot应用程序构建为WAR文件,并将其添加到Tomcat的webapps文件夹中。 还要向webapps文件夹中添加另一个(第三方)WAR文件。 但如果有以下配置可能就好了。 将Spring Boot
我已经搜索了这个问题,但我没有找到任何关于这个案例的东西。我发现了很多“如何将Spring Boot WAR部署到Tomcat”,但是没有关于用Spring Boot包装现有的Tomcat WAR的内容。 我正在尝试用Spring Boot“包装器”包装一个现有的WAR,这样就不必重新配置现有的代码库。这个解决方案不起作用,因为它依赖于在绝对位置可用的WAR,而我们正试图将“应用程序”WAR打包在
问题内容: 我有Web Maven项目。项目的输出是一个文件。我想将此文件添加为对project_b的依赖项。 project_b的文件,具有如下插件: 如何添加了与Web应用程序来project_b ,,和? 问题答案: 在Maven中,添加依赖关系只是小菜一碟。看下面的pom.xml。 设置以上依赖项与在project-apple中导入project-banana.jar相同。 现在,我有另一
val file=header.unionall(lines).todf()
我正在尝试加载一个“WAR”文件到Spring Boot的嵌入式tomcat服务器。为此,我找到了这样的答案:Spring Boot:如何向嵌入式Tomcat添加另一个WAR文件? 但是在我这样做之后,我发现在这个问题上已经问过的错误:用嵌入的Tomcat部署现有的war,但是没有一个满意的答案。 注意:我知道这是一个重复的问题(我把链接),但当时没有足够的声誉添加一个评论,或能力与作者私下联系,
我试图加载一个"war"文件到Spring Boot的嵌入式tomcat服务器。为此,我找到了这个答案:Spring Boot:如何向嵌入式tomcat添加另一个WAR文件? 但在我这么做之后,我发现在这个问题上已经出现了同样的错误:使用嵌入式Tomcat部署现有的war,但没有令人满意的答案。 注意:我知道这可以被看作是一个重复的问题(我放了链接),但当时没有足够的声誉添加评论,或者没有能力私下