You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入Spring HATEOAS后Spring Boot项目启动失败(Logback错误)

Spring HATEOAS依赖引入后项目启动失败(Logback AbstractMethodError)

引入Spring HATEOAS相关依赖后,项目启动抛出AbstractMethodError,错误指向Logback组件的方法实现缺失。

引入的依赖

implementation 'com.toedter:spring-hateoas-jsonapi:2.0.1'
implementation 'org.springframework.boot:spring-boot-starter-hateoas:3.0.2'
implementation "net.logstash.logback:logstash-logback-encoder:7.0.1"

Logback配置(logback-spring.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <springProperty scope="context" name="filename" source="app.logging.filename" defaultValue="application"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy.MM.dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}:%L) - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="DAILY_ROLLING_FILE_APPENDER_JSON" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/${filename}.json</file>

        <!-- TBD: This encoder differs from the one used in the Dashboard project in order to generate JSON output -->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/archived/${filename}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>100MB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- config for STDOUT and SAVE-TO-FILE -->
    <springProfile name="local">
        <root level="info">
            <appender-ref ref="DAILY_ROLLING_FILE_APPENDER_JSON" />
            <appender-ref ref="STDOUT" />
        </root>
    </springProfile>
    <springProfile name="staging">
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="DAILY_ROLLING_FILE_APPENDER_JSON" />
        </root>
    </springProfile>
    <springProfile name="integration">
        <root level="info">
            <appender-ref ref="DAILY_ROLLING_FILE_APPENDER_JSON" />
        </root>
    </springProfile>
    <springProfile name="production">
        <root level="info">
            <appender-ref ref="DAILY_ROLLING_FILE_APPENDER_JSON" />
        </root>
    </springProfile>
</configuration>

启动错误日志

Exception in thread "main" java.lang.AbstractMethodError: Receiver class ch.qos.logback.classic.util.DefaultJoranConfigurator does not define or inherit an implementation of the resolved method 'abstract void configure(ch.qos.logback.classic.LoggerContext)' of interface ch.qos.logback.classic.spi.Configurator.
    at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:140)
    at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362)
    at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
    at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59)
    at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:174)

解决方案

这个错误是Logback版本冲突导致的:Spring Boot 3.0.x默认依赖Logback 2.x版本,而你引入的logstash-logback-encoder:7.0.1依赖的是Logback 1.x版本,两者接口不兼容,导致方法实现缺失。

解决方法二选一:

  1. 升级logstash-logback-encoder到兼容版本
    Spring Boot 3.0.x需要使用logstash-logback-encoder 8.0及以上版本,修改依赖为:

    implementation "net.logstash.logback:logstash-logback-encoder:8.0"
    

    可根据Spring Boot版本选择最新兼容版,如8.17.0等。

  2. 强制使用Spring Boot管理的Logback版本
    如果不想升级encoder,可在依赖中排除logstash-logback-encoder自带的Logback依赖,强制使用Spring Boot提供的版本:

    implementation("net.logstash.logback:logstash-logback-encoder:7.0.1") {
        exclude group: "ch.qos.logback"
    }
    

内容的提问来源于stack exchange,提问作者emoleumassi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:25:19