Java Springboot 使用druid連接池拋ClassNotFoundException

  • 拋錯
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/mico/domo/springboot/demo/config/DruidDBConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1244)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
    ... 28 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
    ... 42 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at com.alibaba.druid.filter.logging.Log4jFilter.<init>(Log4jFilter.java:26)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at com.alibaba.druid.filter.FilterManager.loadFilter(FilterManager.java:114)
    at com.alibaba.druid.pool.DruidAbstractDataSource.addFilters(DruidAbstractDataSource.java:1230)
    at com.alibaba.druid.pool.DruidAbstractDataSource.setFilters(DruidAbstractDataSource.java:1219)
    at com.mico.domo.springboot.demo.config.DruidDBConfig.dataSource(DruidDBConfig.java:102)
    at com.mico.domo.springboot.demo.config.DruidDBConfig$$EnhancerBySpringCGLIB$$b8f4ceda.CGLIB$dataSource$0(<generated>)
    at com.mico.domo.springboot.demo.config.DruidDBConfig$$EnhancerBySpringCGLIB$$b8f4ceda$$FastClassBySpringCGLIB$$caae8b62.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
    at com.mico.domo.springboot.demo.config.DruidDBConfig$$EnhancerBySpringCGLIB$$b8f4ceda.dataSource(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 43 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 63 common frames omitted
  • 可以通過添加
<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
</dependency>
  • 但是這樣導(dǎo)致的問題是SpringBoot和Druid分別用自己的日志框架没佑,SpringBoot用的是slf4j和logback搀庶。druid使用的日志框架是log4j,個人比較推薦的做法:引入log4j-over-slf4j包,作用是通過中間包來替換log4j日志框架即彪,所有日志最終都統(tǒng)一到slf4j友酱,并由logback實現(xiàn)兼丰。

          <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>log4j-over-slf4j</artifactId>
              <version>1.7.25</version>
          </dependency>
    
  • log4j-over-slf4j:
    To use log4j-over-slf4j in your own application, the first step is to locate and then to replace log4j.jar with log4j-over-slf4j.jar. Note that you still need an SLF4J binding and its dependencies for log4j-over-slf4j to work properly.

    In most situations, replacing a jar file is all it takes in order to migrate from log4j to SLF4J.

    Note that as a result of this migration, log4j configuration files will no longer be picked up. If you need to migrate your log4j.properties file to logback, the log4j translator (用這個可以將log4j的配置文件轉(zhuǎn)換成logback的配置文件)might be of help. For configuring logback, please refer to its manual.

  • 附贈一個logback配置文件(logback.xml)

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

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/data/www/file/logs/springboot.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笆载,隨后出現(xiàn)的幾起案子扑馁,更是在濱河造成了極大的恐慌涯呻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檐蚜,死亡現(xiàn)場離奇詭異魄懂,居然都是意外死亡,警方通過查閱死者的電腦和手機闯第,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門市栗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咳短,你說我怎么就攤上這事填帽。” “怎么了咙好?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵篡腌,是天一觀的道長。 經(jīng)常有香客問我勾效,道長嘹悼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任层宫,我火速辦了婚禮杨伙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萌腿。我一直安慰自己限匣,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布毁菱。 她就那樣靜靜地躺著米死,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贮庞。 梳的紋絲不亂的頭發(fā)上峦筒,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音窗慎,去河邊找鬼勘天。 笑死,一個胖子當著我的面吹牛捉邢,可吹牛的內(nèi)容都是我干的脯丝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伏伐,長吁一口氣:“原來是場噩夢啊……” “哼宠进!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起藐翎,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤材蹬,失蹤者是張志新(化名)和其女友劉穎实幕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堤器,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡昆庇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闸溃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片整吆。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辉川,靈堂內(nèi)的尸體忽然破棺而出表蝙,到底是詐尸還是另有隱情,我是刑警寧澤乓旗,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布府蛇,位于F島的核電站,受9級特大地震影響屿愚,放射性物質(zhì)發(fā)生泄漏汇跨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一妆距、第九天 我趴在偏房一處隱蔽的房頂上張望穷遂。 院中可真熱鬧,春花似錦毅厚、人聲如沸塞颁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酷窥,卻和暖如春咽安,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓬推。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工妆棒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沸伏。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓糕珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅糟。 傳聞我的和親對象是個殘疾皇子红选,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容