調(diào)試Spring Boot項目啟動失敗報UnsatisfiedDependencyException異常的一種方式

本文是對之前一篇文章的補(bǔ)充:
Spring Boot項目啟動失敗報:ERROR o.s.boot.SpringApplication - Application startup failed

根據(jù)多次經(jīng)驗格了,spring boot項目啟動時候報出UnsatisfiedDependencyException異常以及伴有 BeanInstantiationException: Failed to instantiate [org.mybatis.spring.SqlSessionTemplate] 的原因赁温,基本上是某個mapper.xml文件中存在錯誤举反,但是失敗后報出的異常又往往沒有指明錯誤報出的位置,這就給我們定位錯誤帶來了麻煩域蜗。
下面介紹一下今天解決項目啟動失敗時候得出的一種解決方式,前提是你的項目是使用配置類進(jìn)行配置的。

1盆赤、配置類源碼,該處定義了SqlSessionTemplate的對象創(chuàng)建以及SqlSessionFactory的對象創(chuàng)建的配置:

    @Bean
    SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource,
                                        @Qualifier("slaverDataSource") DataSource slaverDataSource) {
        SqlSessionFactory factory = null;
        try {
            SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dynamicDataSource(masterDataSource, slaverDataSource));

            PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

            org.springframework.core.io.Resource[] resources = resolver.getResources("classpath*:/*/mybatis/**/*.xml");
            List<org.springframework.core.io.Resource> filterResourceList = new ArrayList<org.springframework.core.io.Resource>();
            List<String> fileNameList = new ArrayList<String>();
            for (int i = 0; i < resources.length; i++) {
                org.springframework.core.io.Resource resource = resources[i];
                if (!fileNameList.contains(resource.getFilename())) {
                    filterResourceList.add(resource);
                    fileNameList.add(resource.getFilename());
                }
            }

            org.springframework.core.io.Resource[] result = new org.springframework.core.io.Resource[filterResourceList.size()];
            sessionFactoryBean.setMapperLocations(filterResourceList.toArray(result));

            factory = (SqlSessionFactory) sessionFactoryBean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("masterDataSource") DataSource masterDataSource,
                                                 @Qualifier("slaverDataSource") DataSource slaverDataSource) {
        return new SqlSessionTemplate(this.sqlSessionFactory(masterDataSource, slaverDataSource));
    }

2歉眷、在上述代碼中factory = (SqlSessionFactory) sessionFactoryBean.getObject();處打斷點(diǎn)牺六,然后啟動項目,運(yùn)行到該處時候汗捡,F(xiàn)6執(zhí)行淑际,就會跳入異常catch打印處e.printStackTrace(); 繼續(xù)F6執(zhí)行,然后就打印出了我們所需要的異常信息了扇住,如下:

org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:\xxx\xxx\xxx\xxx-common\target\classes\base\mybatis\ShiroUserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.yuedu.common.model.basics.BasicsMenu'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.xxx.xxx.model.basics.BasicsMenu
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:522)
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:381)
    at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:546)
    at com.xxx.xxx.config.SpringBootServiceConfig.sqlSessionFactory(SpringBootServiceConfig.java:326)
    at com.xxx.xxx.config.SpringBootServiceConfig$$EnhancerBySpringCGLIB$$936c1517.CGLIB$sqlSessionFactory$2(<generated>)
    at com.xxx.xxx.config.SpringBootServiceConfig$$EnhancerBySpringCGLIB$$936c1517$$FastClassBySpringCGLIB$$81c66a7c.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
    at com.xxx.xxx.config.SpringBootServiceConfig$$EnhancerBySpringCGLIB$$936c1517.sqlSessionFactory(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1199)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
    at com.xxx.xxx.start.Application.main(Application.java:54)

從上面異常信息中的第一行春缕,就可以很明確看到問題出現(xiàn)在哪里了。

注:也可以嘗試在控制臺打印的日志中查詢 Failed to parse mapping resource 看看能不能找到該處錯誤艘蹋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锄贼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子女阀,更是在濱河造成了極大的恐慌宅荤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浸策,死亡現(xiàn)場離奇詭異膘侮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)的榛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門琼了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夫晌,你說我怎么就攤上這事雕薪。” “怎么了晓淀?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵所袁,是天一觀的道長。 經(jīng)常有香客問我凶掰,道長燥爷,這世上最難降的妖魔是什么蜈亩? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮前翎,結(jié)果婚禮上稚配,老公的妹妹穿的比我還像新娘。我一直安慰自己港华,他們只是感情好道川,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著立宜,像睡著了一般冒萄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橙数,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天尊流,我揣著相機(jī)與錄音,去河邊找鬼灯帮。 笑死崖技,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的施流。 我是一名探鬼主播响疚,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鄙信,長吁一口氣:“原來是場噩夢啊……” “哼瞪醋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起装诡,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤银受,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸦采,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宾巍,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年渔伯,在試婚紗的時候發(fā)現(xiàn)自己被綠了顶霞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锣吼,死狀恐怖选浑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玄叠,我是刑警寧澤古徒,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站读恃,受9級特大地震影響隧膘,放射性物質(zhì)發(fā)生泄漏代态。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一疹吃、第九天 我趴在偏房一處隱蔽的房頂上張望蹦疑。 院中可真熱鬧,春花似錦互墓、人聲如沸必尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽判莉。三九已至,卻和暖如春育谬,著一層夾襖步出監(jiān)牢的瞬間券盅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工膛檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锰镀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓咖刃,卻偏偏與公主長得像泳炉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚎杨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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