记录springboot 关于 Class path contains multiple SLF4J bindings问题的解决

springboot不熟、maven不熟、idea不熟,mybaits已有大半年没碰,东西都是从其他网页复制的,记本次踩坑脱坑过程。

1、尝试springboot整合mybatis,maven文件网上一通复制。

启动后报找不到log4j的jar。

2、失败尝试1

看到有网页上说排除spring-boot-starter-web中的log


    org.springframework.boot
    spring-boot-starter-web
   
        
            org.springframework.boot
            spring-boot-starter-logging
        
    

然后引入

    
        org.springframework.boot
        spring-boot-starter-log4j
        1.3.8.RELEASE
    

尝试后发现项目可以启动,但是报Class path contains multiple SLF4J bindings。大体意思是存在两个sfl4j的绑定。一个是log4j,一个是logback.

3、失败尝试2

又是一通搜索,通过maven命令:mvn denpendency:tree查看jar包之间的依赖关系,确实存在如上两个jar

[INFO] Building SpringBootMybatis 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ SpringBootMybatis ---
[INFO] SpringBootMybatis:SpringBootMybatis:jar:1.0-SNAPSHOT
[INFO] +- org.mybatis.spring.boot:mybatis-spring-boot-starter:jar:2.0.0:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.1.3.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.1.3.RELEASE:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.11.2:compile
[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.11.2:compile
[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] |  |  +- org.springframework:spring-core:jar:5.1.5.RELEASE:compile
[INFO] |  |  |  \- org.springframework:spring-jcl:jar:5.1.5.RELEASE:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.23:runtime
[INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.1.3.RELEASE:compile
[INFO] |  |  +- com.zaxxer:HikariCP:jar:3.2.0:compile
[INFO] |  |  \- org.springframework:spring-jdbc:jar:5.1.5.RELEASE:compile
[INFO] |  +- org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:jar:2.0.0:compile
[INFO] |  +- org.mybatis:mybatis:jar:3.5.0:compile
[INFO] |  \- org.mybatis:mybatis-spring:jar:2.0.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.1.3.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:2.1.3.RELEASE:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.8:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.8:compile
[INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.8:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.3.RELEASE:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.16:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.16:compile
[INFO] |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.16:compile
[INFO] |  +- org.hibernate.validator:hibernate-validator:jar:6.0.14.Final:compile
[INFO] |  |  +- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
[INFO] |  |  \- com.fasterxml:classmate:jar:1.4.0:compile
[INFO] |  +- org.springframework:spring-web:jar:5.1.5.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-beans:jar:5.1.5.RELEASE:compile
[INFO] |  \- org.springframework:spring-webmvc:jar:5.1.5.RELEASE:compile
[INFO] |     +- org.springframework:spring-aop:jar:5.1.5.RELEASE:compile
[INFO] |     \- org.springframework:spring-expression:jar:5.1.5.RELEASE:compile
[INFO] +- com.alibaba:druid-spring-boot-starter:jar:1.1.9:compile
[INFO] |  +- com.alibaba:druid:jar:1.1.9:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] |  \- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.3.RELEASE:compile
[INFO] +- mysql:mysql-connector-java:jar:8.0.15:compile
[INFO] +- org.apache.kafka:kafka_2.12:jar:2.1.1:compile
[INFO] |  +- org.apache.kafka:kafka-clients:jar:2.0.1:compile
[INFO] |  |  +- org.lz4:lz4-java:jar:1.4.1:compile
[INFO] |  |  \- org.xerial.snappy:snappy-java:jar:1.1.7.1:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.8:compile
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.9.8:compile
[INFO] |  +- net.sf.jopt-simple:jopt-simple:jar:5.0.4:compile
[INFO] |  +- com.yammer.metrics:metrics-core:jar:2.2.0:compile
[INFO] |  +- org.scala-lang:scala-library:jar:2.12.7:compile
[INFO] |  +- org.scala-lang:scala-reflect:jar:2.12.7:compile
[INFO] |  +- com.typesafe.scala-logging:scala-logging_2.12:jar:3.9.0:compile
[INFO] |  +- com.101tec:zkclient:jar:0.11:compile
[INFO] |  \- org.apache.zookeeper:zookeeper:jar:3.4.13:compile
[INFO] |     \- org.apache.yetus:audience-annotations:jar:0.5.0:compile
[INFO] +- org.springframework.kafka:spring-kafka:jar:2.2.4.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:5.1.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-messaging:jar:5.1.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-tx:jar:5.1.5.RELEASE:compile
[INFO] |  \- org.springframework.retry:spring-retry:jar:1.2.4.RELEASE:compile
[INFO] +- org.springframework.session:spring-session:jar:1.3.1.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] \- org.springframework.boot:spring-boot-devtools:jar:2.1.3.RELEASE:compile (optional) 
[INFO]    \- org.springframework.boot:spring-boot:jar:2.1.3.RELEASE:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.262 s
[INFO] Finished at: 2019-07-22T22:49:39+08:00
[INFO] Final Memory: 27M/309M
[INFO] ------------------------------------------------------------------------
而这两个jar都是被spring-boot-starter依赖的spring-boot-starter-logging依赖的。

纳闷springboot自己本身就存在jar冲突?不明所以,先解决问题,找到了依赖关系排除他!

       
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
             
                 
                     org.springframework.boot
                     spring-boot-starter-logging
                 
             
        

重新启动,提醒依然存在。mvn命令重新打出依赖关系,没有变化!懵逼了,各种重新清工程、jar,一顿猛操作,然而发现没有任何鸟用。

idea可以查看maven依赖关系,发现

记录springboot 关于 Class path contains multiple SLF4J bindings问题的解决_第1张图片

有多处jar依赖spring-boot-starter,但是druid依赖的版本和其他的不一致。

将代码中和druid相关的全部注释掉,再启动依然没有变化。

将上一步中引入的log4j去掉,错误终于变化了,折腾了一圈,又重新回到了初始。

仔细看了报错的地方,是mybatis jar里面报的错误,难道mybatis里面写死了使用log4j?肯定不可能,作为一款牛逼哄哄的开源oorm怎么会犯这种低级错误。然后忽然想起,mybatis配置中是可以指定日志类型的

记录springboot 关于 Class path contains multiple SLF4J bindings问题的解决_第2张图片

logImpl的value写成了log4j,改成上述图片中值后,再重启,错误消失。问题解决。

 

推荐一篇讲logback、log4j关系的文章,写的贼好!

https://www.cnblogs.com/suger43894/p/9543685.html

你可能感兴趣的:(Javaweb)