Mi aplicación web ya no se inicia después de actualizar a Spring Boot 2.4. Está arrojando el siguiente error:
Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.Estoy usando el siguiente código para cambiar la ruta de contexto y mi investigación me indica que ese es el "culpable" (cambiar la ruta de contexto):
@Bean public ServletWebServerFactory servletContainer() { String tomcatPort = environment.getProperty("tomcatPort"); TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); tomcat.setPort(tomcatPort != null ? Integer.parseInt(tomcatPort) : 8080); tomcat.setContextPath("/Carbon"); tomcat.setBaseDirectory(new File(System.getenv("MDHIS3_HOME"))); setTomcatProtocol(tomcat); return tomcat; }Tengo el siguiente método y puedo ver que se puede usar para pasar un DefaultServletName pero no tengo idea de qué valor se supone que debo pasar:
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }Esto funcionó perfectamente en Spring Boot 2.3.4. ¿Qué valor paso allí? ¿Es el nombre del controlador principal?
Como se describe en las notas de la versión de Spring Boot 2.4 , el DefaultServlet proporcionado por el contenedor de Servlet incrustado ya no está registrado de forma predeterminada. Si su aplicación lo necesita, como parece necesitar el suyo, puede habilitarlo configurando server.servlet.register-default-servlet en true .
Alternativamente, puede configurarlo programáticamente usando un bean WebServerFactoryCustomizer :
@Bean WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() { return (factory) -> factory.setRegisterDefaultServlet(true); }Tenga en cuenta que la configuración debe aplicarse a través de un personalizador para que la configuración predeterminada basada en propiedades no la sobrescriba.