Spring boot 2.4.2 多环境配置 logback

本文介绍Spring Boot多环境配置Logback及自定义日志文件的方法。需在Logback配置文件中引用Spring Boot对应环境变量,Spring Boot配置文件有application.yml等,Logback配置文件用logback - spring.xml。还说明了不同日志级别的区别及顺序。

Springboot 多环境配置 logback 以及自定义日志文件

在logback配置文件中引用springboot对应环境的变量。

一、Springboot 配置文件

  • application.yml
logging:
  config: classpath:logback-spring.xml
  • application-dev.yml
logging:
  level.root: debug
  file:
    path: D:/projects/demo-logback/logs
  • application-prod.yml
logging:
  level.root: info
  file:
    path: /opt/project/demo-logback/logs

二、logback 配置文件

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 获取application配置文件中的配置 -->
    <springProperty scope="context" name="logLevel" source="logging.level.root"/>
    <springProperty scope="context" name="logPath" source="logging.file.path"/>
    <!-- 日志输出格式 -->
    <property name="logPattern" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS})|%level|%thread|%c{0}[%L]|%msg%n"/>

    <!--控制台日志-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
    </appender>
    <!--DEBUG日志-->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/debug.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <!--WARN日志-->
    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/warn.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <!--INFO日志-->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/info.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <!--ERROR日志-->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/error.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!--处理成功日志-->
    <appender name="push_suc" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/push_suc.log</file>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/push_suc.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <!--处理失败日志-->
    <appender name="push_fail" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/push_fail.log</file>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/push_fail.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <Logger name="org.springframework" level="warn"/>
    <Logger name="org.apache.http.client.protocol.ResponseProcessCookies" level="error"/>
    <Logger name="org.apache" level="warn"/>
    <logger name="push_suc" level="INFO" additivity="false">
        <appender-ref ref="push_suc"/>
    </logger>
    <logger name="push_fail" level="INFO" additivity="false">
        <appender-ref ref="push_fail"/>
    </logger>

    <root level="${logLevel}">
        <appender-ref ref="debug"/>
        <appender-ref ref="warn"/>
        <appender-ref ref="info"/>
        <appender-ref ref="error"/>
        <appender-ref ref="console"/>
    </root>
</configuration>


注意:

  • logback的配置文件不能用logback.xml,因为如果用logback.xml,那项目启动就会先去加载logback.xml,再去加载application.properties的了,因此这个名称得改为其他的,根据spring boot那边的命名规范,一般是-spring的,所以我这里用的是logback-spring.xml

  • 在logback配置文件中用application.properties的配置,必须得通过下面这种方式才能获取到application.properties中的配置:

<springProperty scope="context" name="logLevel" source="log.level.root"/>  

##日志级别的区别

  • error 级别只能获取到 error 的日志

  • warn 级别能获取到 warnerror 的日志

  • info 级别能获取到 infowarnerror 的日志

  • debug 级别能获取所有的日志:debug、warn、info、error

所以,日志级别 从高到底 的顺序是:
error > warn > info >debug

E:\Java\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:E:\IDEA\IntelliJ IDEA 2021.3.2\lib\idea_rt.jar=61794:E:\IDEA\IntelliJ IDEA 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath E:\Java\jre\lib\charsets.jar;E:\Java\jre\lib\deploy.jar;E:\Java\jre\lib\ext\access-bridge-64.jar;E:\Java\jre\lib\ext\cldrdata.jar;E:\Java\jre\lib\ext\dnsns.jar;E:\Java\jre\lib\ext\jaccess.jar;E:\Java\jre\lib\ext\jfxrt.jar;E:\Java\jre\lib\ext\localedata.jar;E:\Java\jre\lib\ext\nashorn.jar;E:\Java\jre\lib\ext\sunec.jar;E:\Java\jre\lib\ext\sunjce_provider.jar;E:\Java\jre\lib\ext\sunmscapi.jar;E:\Java\jre\lib\ext\sunpkcs11.jar;E:\Java\jre\lib\ext\zipfs.jar;E:\Java\jre\lib\javaws.jar;E:\Java\jre\lib\jce.jar;E:\Java\jre\lib\jfr.jar;E:\Java\jre\lib\jfxswt.jar;E:\Java\jre\lib\jsse.jar;E:\Java\jre\lib\management-agent.jar;E:\Java\jre\lib\plugin.jar;E:\Java\jre\lib\resources.jar;E:\Java\jre\lib\rt.jar;F:\南山\jhzx\target\classes;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-data-jdbc\2.6.13\spring-boot-starter-data-jdbc-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.6.13\spring-boot-starter-jdbc-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-jdbc\5.3.23\spring-jdbc-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\data\spring-data-jdbc\2.3.9\spring-data-jdbc-2.3.9.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\data\spring-data-relational\2.3.9\spring-data-relational-2.3.9.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\data\spring-data-commons\2.6.9\spring-data-commons-2.6.9.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-tx\5.3.23\spring-tx-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-context\5.3.23\spring-context-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.6.13\spring-boot-starter-data-jpa-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.6.13\spring-boot-starter-aop-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;C:\Users\TWZXZ\.m2\repository\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3.jar;C:\Users\TWZXZ\.m2\repository\jakarta\persistence\jakarta.persistence-api\2.2.3\jakarta.persistence-api-2.2.3.jar;C:\Users\TWZXZ\.m2\repository\org\hibernate\hibernate-core\5.6.12.Final\hibernate-core-5.6.12.Final.jar;C:\Users\TWZXZ\.m2\repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;C:\Users\TWZXZ\.m2\repository\net\bytebuddy\byte-buddy\1.11.22\byte-buddy-1.11.22.jar;C:\Users\TWZXZ\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\TWZXZ\.m2\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\TWZXZ\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\TWZXZ\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.7\jaxb-runtime-2.3.7.jar;C:\Users\TWZXZ\.m2\repository\org\glassfish\jaxb\txw2\2.3.7\txw2-2.3.7.jar;C:\Users\TWZXZ\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.12\istack-commons-runtime-3.0.12.jar;C:\Users\TWZXZ\.m2\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\data\spring-data-jpa\2.6.9\spring-data-jpa-2.6.9.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-orm\5.3.23\spring-orm-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-aspects\5.3.23\spring-aspects-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.6.13\spring-boot-starter-web-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter\2.6.13\spring-boot-starter-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot\2.6.13\spring-boot-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.13\spring-boot-autoconfigure-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.6.13\spring-boot-starter-logging-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\TWZXZ\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\TWZXZ\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\TWZXZ\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\TWZXZ\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\TWZXZ\.m2\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.6.13\spring-boot-starter-json-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.4.2\jackson-databind-2.13.4.2.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;C:\Users\TWZXZ\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.13\spring-boot-starter-tomcat-2.6.13.jar;C:\Users\TWZXZ\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.68\tomcat-embed-core-9.0.68.jar;C:\Users\TWZXZ\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.68\tomcat-embed-el-9.0.68.jar;C:\Users\TWZXZ\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.68\tomcat-embed-websocket-9.0.68.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-web\5.3.23\spring-web-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-webmvc\5.3.23\spring-webmvc-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\apache\poi\poi-ooxml\5.2.0\poi-ooxml-5.2.0.jar;C:\Users\TWZXZ\.m2\repository\org\apache\poi\poi\5.2.0\poi-5.2.0.jar;C:\Users\TWZXZ\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\TWZXZ\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\TWZXZ\.m2\repository\com\zaxxer\SparseBitSet\1.2\SparseBitSet-1.2.jar;C:\Users\TWZXZ\.m2\repository\org\apache\poi\poi-ooxml-lite\5.2.0\poi-ooxml-lite-5.2.0.jar;C:\Users\TWZXZ\.m2\repository\org\apache\xmlbeans\xmlbeans\5.0.3\xmlbeans-5.0.3.jar;C:\Users\TWZXZ\.m2\repository\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01.jar;C:\Users\TWZXZ\.m2\repository\org\apache\commons\commons-compress\1.21\commons-compress-1.21.jar;C:\Users\TWZXZ\.m2\repository\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;C:\Users\TWZXZ\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\TWZXZ\.m2\repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;C:\Users\TWZXZ\.m2\repository\org\apache\pdfbox\pdfbox\3.0.0\pdfbox-3.0.0.jar;C:\Users\TWZXZ\.m2\repository\org\apache\pdfbox\pdfbox-io\3.0.0\pdfbox-io-3.0.0.jar;C:\Users\TWZXZ\.m2\repository\org\apache\pdfbox\fontbox\3.0.0\fontbox-3.0.0.jar;C:\Users\TWZXZ\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\TWZXZ\.m2\repository\org\freemarker\freemarker\2.3.32\freemarker-2.3.32.jar;C:\Users\TWZXZ\.m2\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\Users\TWZXZ\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\TWZXZ\.m2\repository\com\mysql\mysql-connector-j\8.0.31\mysql-connector-j-8.0.31.jar;C:\Users\TWZXZ\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\TWZXZ\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;C:\Users\TWZXZ\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\3.0.3\mybatis-spring-boot-starter-3.0.3.jar;C:\Users\TWZXZ\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\3.0.3\mybatis-spring-boot-autoconfigure-3.0.3.jar;C:\Users\TWZXZ\.m2\repository\org\mybatis\mybatis\3.5.14\mybatis-3.5.14.jar;C:\Users\TWZXZ\.m2\repository\org\mybatis\mybatis-spring\3.0.3\mybatis-spring-3.0.3.jar com.example.jhzx.JhzxApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.13) 2025-08-01 14:36:46.128 INFO 18552 --- [ main] com.example.jhzx.JhzxApplication : Starting JhzxApplication using Java 1.8.0_441 on DESKTOP-RTSFTUF with PID 18552 (F:\南山\jhzx\target\classes started by TWZXZ in F:\南山\jhzx) 2025-08-01 14:36:46.131 INFO 18552 --- [ main] com.example.jhzx.JhzxApplication : No active profile set, falling back to 1 default profile: "default" 2025-08-01 14:36:46.666 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-08-01 14:36:46.667 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode. 2025-08-01 14:36:46.691 INFO 18552 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.example.jhzx.repository.DemandRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table. 2025-08-01 14:36:46.692 INFO 18552 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.example.jhzx.repository.Product_InformationRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table. 2025-08-01 14:36:46.693 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21 ms. Found 0 JDBC repository interfaces. 2025-08-01 14:36:46.700 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-08-01 14:36:46.700 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-08-01 14:36:46.727 INFO 18552 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 22 ms. Found 2 JPA repository interfaces. 2025-08-01 14:36:46.879 ERROR 18552 --- [ main] o.s.boot.SpringApplication : Application run failed java.lang.IllegalArgumentException: Unable to instantiate org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitializationDetector [org.mybatis.spring.boot.autoconfigure.MybatisDependsOnDatabaseInitializationDetector] at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:131) ~[spring-boot-2.6.13.jar:2.6.13] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_441] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_441] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) ~[na:1.8.0_441] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[na:1.8.0_441] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_441] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_441] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_441] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_441] at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:118) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:103) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.getDetectors(DatabaseInitializationDependencyConfigurer.java:157) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.detectDependsOnInitializationBeanNames(DatabaseInitializationDependencyConfigurer.java:144) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.postProcessBeanFactory(DatabaseInitializationDependencyConfigurer.java:111) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:325) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:191) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745) [spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420) [spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) [spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) [spring-boot-2.6.13.jar:2.6.13] at com.example.jhzx.JhzxApplication.main(JhzxApplication.java:10) [classes/:na] Caused by: java.lang.UnsupportedClassVersionError: org/mybatis/spring/boot/autoconfigure/MybatisDependsOnDatabaseInitializationDetector has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_441] at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[na:1.8.0_441] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_441] at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[na:1.8.0_441] at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[na:1.8.0_441] at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[na:1.8.0_441] at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[na:1.8.0_441] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_441] at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[na:1.8.0_441] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_441] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_441] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_441] at java.lang.Class.forName0(Native Method) ~[na:1.8.0_441] at java.lang.Class.forName(Class.java:348) ~[na:1.8.0_441] at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[spring-core-5.3.23.jar:5.3.23] at org.springframework.boot.util.Instantiator$TypeSupplier$1.get(Instantiator.java:210) ~[spring-boot-2.6.13.jar:2.6.13] at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:125) ~[spring-boot-2.6.13.jar:2.6.13] ... 24 common frames omitted 进程已结束,退出代码1
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值