programing

웹 앱을 Spring Boot 2.4로 업그레이드한 후 잘못된 StateException

minimums 2023. 7. 22. 09:53
반응형

웹 앱을 Spring Boot 2.4로 업그레이드한 후 잘못된 StateException

Spring Boot 2.4로 업그레이드한 후 웹 앱이 더 이상 시작되지 않습니다.다음 오류가 발생하고 있습니다.

Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.

저는 다음 코드를 사용하여 컨텍스트 경로를 변경하고 있으며, 제 연구는 그것이 "culprit"(컨텍스트 경로 변경)임을 지적합니다.

@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;
}

다음 방법을 사용하여 defaultServletName을 전달할 수 있지만 전달해야 할 값이 무엇인지 알 수 없습니다.

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
{
    configurer.enable();
}

이것은 Spring Boot 2.3.4에서 완벽하게 작동했습니다.제가 거기서 어떤 가치를 전달하나요?메인 컨트롤러 이름인가요?

Spring Boot 2.4 릴리즈 노트에 설명된 바와 같이,DefaultServlet내장된 서블릿 컨테이너에서 제공하는 것은 더 이상 기본적으로 등록되지 않습니다.응용 프로그램에 필요한 경우 프로그램에 필요한 것처럼 다음을 설정하여 활성화할 수 있습니다.server.servlet.register-default-servlet로.true.

또는 를 사용하여 프로그래밍 방식으로 구성할 수 있습니다.WebServerFactoryCustomizer콩:

@Bean
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() {
    return (factory) -> factory.setRegisterDefaultServlet(true);
}

기본 속성 기반 구성이 덮어쓰지 않도록 커스터마이저를 통해 구성을 적용해야 합니다.

언급URL : https://stackoverflow.com/questions/64822250/illegalstateexception-after-upgrading-web-app-to-spring-boot-2-4

반응형