We are moving from Spring WebInitializer
to Spring boot 2.5.0 SpringBootServletInitializer
We need to add a context path for our Servlet dispatcher, with the following code:
@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");
};
}
}
When running Maven WAR regular Tomcat 8.5, the Servlet context isn't set, log:
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
Regular Main
public static void main(String[] args) {
SpringApplication.run(WebServerConfig.class, args);
}
When running embedded Tomcat code works as expected:
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>
I also have configure
method:
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(WebServerConfig.class);
}
Am I missing code/property to enable Servlet context when building a WAR?
I found older question and question2 without a real answer except using different war name.