這個問題整到 凌晨1:36,網上搜了很多個文章,解決方案都不對。有的都在亂說。
這類問題很多都是英文文章,沒見說明白的,中文解決方案几乎沒有。
另外也看到了類似的問題,其實這個問題就是重複掃描了。
# # 問題描述:
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'dataSource' defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class]] for bean 'dataSource': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; factoryMethodName=dataSource; initMethodName=init; destroyMethodName=(inferred); defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]] bound.
# # 報錯場景
正常的使用 Druid 數據連接池沒有問題,我在使用springboot 整合 sharding-jdbc 的時候出現的這個錯誤。
# # 錯誤原因
仔細分析,SpringBoot本身具有自動配置,現在自動配置時發生衝突了,那麼我們可以將衝突的部分排除掉,即告訴SpringBoot,某個類不用幫我自動配置了,這裏我們將Druid的關於數據源的配置排除掉。
# # 解決方案
在主啓動類上添加:
exclude={DruidDataSourceAutoConfigure.class}
問題解決。
# # 其他的問題也是類似的
只要看到紅框裏邊的錯誤類型,導致的項目不能啓動,按照上邊的解決方式替換綠色框的內容即可。