aratata
aratata

Reputation: 1397

Spring server doesn't start with actuator dependency

If I add spring boot actuator dependency my server doesn't start. I get the following error:

    SEVERE [main] org.apache.catalina.startup.HostConfig.deployDescriptor Error deploying deployment descriptor [tomcat path\conf\Catalina\localhost\test.xml]
            java.lang.IllegalStateException: Error starting child
                    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
                    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
                    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:692)
                    
...
            Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/agromarket]]
                    at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
                    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
                    ... 37 more
            Caused by: java.lang.ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
                    at rs.navigator.alexandar.sync.WebAppInitializer.onStartup(WebAppInitializer.java:34)
                    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
                    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

Dependency:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

Any ideas why? From my knowledge even if the versions aren't compatible the server should still be able to start.

Edit: My WebAppInitializer:

public class WebAppInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println(("------------------ Sync context initialized and application started ------------------"));
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // ctx.register(ServletContextListener.class);

//      ctx.register(SecurityConfiguration.class);
//      ctx.register(SpringFoxConfig.class);
//      ctx.register(WebMvcConfigure.class);
//      ctx.register(JPAConfiguration.class);
//      ctx.setServletContext(servletContext);
        
        // Reconfigure log4j
//      ServletContext sctx = ctx.getServletContext();
        System.setProperty("logFilename", servletContext.getContextPath().substring(1));
        org.apache.logging.log4j.core.LoggerContext sctxLog =
                (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
            sctxLog.reconfigure();
            
        //Dispatcher servlet
        ServletRegistration.Dynamic servlet = servletContext.addServlet("mvc-dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
        ctx.close();
    }
}

Error stack after adding @EnableAutoConfiguration enter image description here

Upvotes: 0

Views: 523

Answers (1)

Piotr P. Karwasz
Piotr P. Karwasz

Reputation: 16045

If you want benefit from the automatic features of Spring Boot, your @Configuration class must be annotated with @EnableAutoConfiguration.

Since the auto-configuration already creates a DispatcherServlet bound to /, you can safely change your WebAppInitializer class to:

@SpringBootApplication
public class WebAppInitializer extends SpringBootServletInitializer {

}

Upvotes: 1

Related Questions