1. 程式人生 > >踩坑記2018-7-30B:SpringCloud下mybatis DAO例項化失敗

踩坑記2018-7-30B:SpringCloud下mybatis DAO例項化失敗


Field baseDAO in per.wilson.distributed.dao.service.BaseServiceImpl required a bean of type 'per.wilson.distributed.dao.BaseDAO' that could not be found.

required a bean of type xxxx,初眼看是一個很普通的錯誤,一般來說都是DAO掃描配置錯誤,但出現在整合中則顯得耐人尋味了。本人出現該錯誤的整合環境:spring-cloud,mybatis-plus,我想也只能解決該環境下的bean not be found問題。

通過依賴排錯確認了是由於spring-cloud依賴的匯入導致了Bean的生成亂序。個人原來用的spring與mybatis的整合掃描類是org.mybatis.spring.mapper.MapperScannerConfigurer,去除所有spring-cloud的依賴後service可以找到對應的DAO進行注入,但加回Spring Cloud的依賴後就顯示找不到Bean的錯誤了,原因只有2個:1、mapperScanner沒有進行生成DAO(已確保mapperScanner生成成功);2、Spring的bean初始化亂序。由於無法對不瞭解Spring Cloud的初始化過程,所以先對Scanner進行了解找替代方案。左圖是關於掃描的類:

嘗試了用ClassPathMapperScanner與MapperScan替代MapperScannerConfigurer,結果是MapperScan可以成功生成DAO,原入坑配置如下圖:


    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("per.wilson.distributed");
        return mapperScannerConfigurer;
    }

出坑配置:

@MapperScan("per.wilson.distributed.dao")

這也反應了註解的配置解析與BBean的配置解析不同