我们正在从SpringWebInitializer
转移到Spring引导2.5.0SpringBootServletInitializer
我们需要为Servlet调度器添加一个上下文路径,代码如下:
@SpringBootApplication(exclude = { JmsAutoConfiguration.class, ActiveMQAutoConfiguration.class,
SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
public class WebServerConfig extends SpringBootServletInitializer implements ApplicationContextAware {
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer() {
return factory -> {
factory.setRegisterDefaultServlet(true);
factory.setContextPath("/servlet");
};
}
}
当运行MavenWAR常规Tomcat8.5时,Servlet上下文没有设置,日志:
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
常规主
public static void main(String[] args) {
SpringApplication.run(WebServerConfig.class, args);
}
当运行嵌入的Tomcat代码时,可以按预期工作:
o.a.c.c.C.[.[localhost].[/servlet] : Initializing Spring DispatcherServlet 'dispatcherServlet'
Maven pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springframework.boot-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${springframework.boot-version}</version>
<scope>provided</scope>
</dependency>
我还有configure
方法:
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(WebServerConfig.class);
}
在构建WAR时,我是否缺少启用Servlet上下文的代码/属性?
我发现旧的问题和问题2除了使用不同的战争名称之外没有真正的答案。
使用下面的应用程序属性为spring-boot应用程序设置上下文路径。如果您使用的是yaml配置。
server:
servlet:
context-path: /servlet
如果您正在使用application.properties
server.servlet.context-path = /servlet
我们通过在SpringApplicationBuilder
:中添加属性来解决问题
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
Properties bootProperties = new Properties();
bootProperties.setProperty("spring.mvc.servlet.path", "/servlet");
return builder.sources(WebServerConfig.class).properties(bootProperties);
}