es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SpringBootServletInitializer causa una violación de restricción de cargador con slf4j.

Tengo una aplicación Spring Boot que se implementa en WSO2 IS. Por motivos de actualización, tuve que actualizar algunas dependencias y pasé de Spring Boot 1.5.10 a 2.2.2. Tengo que hacer algunos ajustes en el código, pero una cosa está causando el siguiente problema:

Caused by: java.lang.LinkageError: loader constraint violation: when resolving method “org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;” the class loader (instance of org/wso2/carbon/webapp/mgt/loader/CarbonWebappClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) for the method’s defining class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type org/slf4j/ILoggerFactory used in the signature

Por lo tanto, en esta aplicación tengo una clase que inicializa el servlet usando SpringBootServletInitializer:

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(final SpringApplicationBuilder builder) {
        return builder.sources(App.class);
    }

Observé que cuando elimino la extensión de SpringBootServletInitializer, no obtengo errores. No puedo ver qué puede causar tal comportamiento.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que está experimentando una violación de restricción de cargador cuando intenta actualizar su aplicación Spring Boot de la versión 1.5.10 a la 2.2.2. Esto se debe probablemente al hecho de que la clase SpringBootServletInitializer está siendo cargada por dos cargadores de clases diferentes, los cuales tienen diferentes objetos de clase para el tipo org/slf4j/ILoggerFactory utilizado en la firma.

    Puede intentar eliminar la extensión de SpringBootServletInitializer para ver si esto resuelve el problema. Si no es así, es posible que necesite investigar más para determinar la causa raíz de la violación de restricción de cargador.

Comments are closed.