因maven包依賴問題致使項目啓動時掃描到多個SqlSessionFactory從而報錯的問題排查

背景

A項目以前一直都是好好的,可是某天下午啓動的時候報錯,報錯見下,報錯緣由是java

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.apache.ibatis.session.SqlSessionFactory' available: more than one 'primary' bean found among candidates。 

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionTemplate' defined in class path resource \[tk/mybatis/mapper/autoconfigure/MapperAutoConfiguration.class\]: Unsatisfied dependency expressed through method 'sqlSessionTemplate' parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.apache.ibatis.session.SqlSessionFactory' available: more than one 'primary' bean found among candidates: \[aSqlSessionFactory, bSqlSessionFactory\]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:732)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:474)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1256)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1105)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)

定位問題

初步定位這個問題的時候眼睛一直盯着more than one 'primary' bean found among candidates: [aSqlSessionFactory, bSqlSessionFactory],而後去看了一下A項目中的mybatis配置,發現都是正常的,這裏一直也沒有人改動過。spring

因此項目啓動的時候爲何會掃出來bSqlSessionFactory呢?sql

我嘗試把代碼切換到master分支上,發現又是能夠正常啓動的,因此能夠確定應該是當前分支哪裏出現了問題,而後和master分支的代碼進行了對比,沒有作什麼改動。。。express

可是項目及依賴的版本號是不一樣的!!!apache

當前分支使用的是SNAPSHOT的版本號,而後想到了bSqlSessionFactory是配置在B項目中的,難道是包依賴出現了問題?session

A項目依賴B項目的facade包,拉下來最新的B項目的代碼,發現最近一次有人對B項目的facade的依賴進行了調整,新增了一個對B項目的dao包的依賴,這樣啓動A項目啓動的時候就會把B項目的mybatis配置也掃描進來,從而發現了兩個sqlSessionFactory致使了NoUniqueBeanDefinitionException。mybatis

而後找到了相關人員肯定了一下後發現是誤加上去的,最後把B項目的facade中依賴B自身的dao包這個依賴關係給去掉後就能夠正常啓動a項目了。app

相關文章
相關標籤/搜索