【问题标题】:Spring server doesn't start with actuator dependencySpring 服务器不以执行器依赖项启动
【发布时间】:2021-06-02 15:03:20
【问题描述】:

如果我添加 spring boot 执行器依赖项,我的服务器不会启动。我收到以下错误:

    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>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

任何想法为什么?据我所知,即使版本不兼容,服务器仍然应该能够启动。

编辑: 我的 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();
    }
}

添加@EnableAutoConfiguration 后的错误堆栈

【问题讨论】:

  • 可以添加WebAppInitializer的代码吗?
  • @PiotrP.Karwasz 刚刚做了,希望它有所帮助。
  • 我刚刚检查过,当我添加 spring-boot-starter-web 依赖项时服务器也没有启动。
  • 为什么需要sctxLog.reconfigure()?转换为接口的特定实现总是有风险的:在您的情况下,使用的实现类发生了变化,因此 ClassCastException..
  • 我基本上只是用 SpringBootServletInitializer 扩展了 WebAppInitializer,认为它只会添加所需的功能。

标签: spring-boot spring-boot-actuator tomcat9


【解决方案1】:

如果您想从 Spring Boot 的自动功能中受益,您的 @Configuration 类必须使用 @EnableAutoConfiguration 注释。

由于自动配置已经创建了一个绑定到/DispatcherServlet,您可以安全地将您的WebAppInitializer 类更改为:

@SpringBootApplication
public class WebAppInitializer extends SpringBootServletInitializer {

}

【讨论】:

  • 我已经尝试添加@EnableAutoConfiguration,但是添加后我的服务器没有启动。
  • 你需要@EnableAutoConfiguration + @ConfigurationSpringBootApplication 意味着两者。
  • 我都加了,结果一样。
  • “我的服务器无法启动” 是什么意思?您能否使用日志中的错误和WebAppInitializer 课程的更新版本更新您的问题(如果它与我的答案中的不同)。
  • 我添加了错误(必须将其作为图片进行,因为如果我自己编写大量文本,stackoverflow 不允许更多代码)。无论如何,WebAppInitializer 与我之前发布的期望相同,它现在扩展了 SpringBootServletInitializer 并具有 @SpringBootApplication 注释。
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 2017-05-13
  • 2014-10-07
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
相关资源
最近更新 更多