【发布时间】:2018-02-19 09:50:35
【问题描述】:
我正在尝试将外部 war 文件部署到 spring boot 的嵌入式 tomcat 中。我以 .war 文件的格式添加了 gradle 依赖项,我想通过 spring boot 应用程序运行这个 war,但没有运行请任何人都可以帮助我.
【问题讨论】:
我正在尝试将外部 war 文件部署到 spring boot 的嵌入式 tomcat 中。我以 .war 文件的格式添加了 gradle 依赖项,我想通过 spring boot 应用程序运行这个 war,但没有运行请任何人都可以帮助我.
【问题讨论】:
试试这种方法。在您的 Spring Boot 应用程序中添加此代码块。
你的war文件必须放在src/main/resources目录中。
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {
new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs();
try {
tomcat.addWebapp("/cms", new ClassPathResource("cms.war").getFile().toString());
} catch (Exception ex) {
throw new IllegalStateException("Failed to add webapp",ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
-> 将 application.properties 中的基本目录更改为
server.tomcat.basedir=temp-server
【讨论】:
Spring Boot 2 中的一些类发生了变化,因此您必须这样做:
@Bean
public ServletWebServerFactory servletContainer() {
return new TomcatServletWebServerFactory() {
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs();
try {
tomcat.addWebapp("/cms", new ClassPathResource("cms.war").getFile().toString());
} catch (Exception ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatWebServer(tomcat);
}
};
}
【讨论】: