奇葩问题:spring+mybaits项目突然出现其中一些Mapper类找不到

一、问题现象

     1,No bean named 'bomManageMapper' found in org.springframework.beans.factory.support.DefaultListableBeanFactory@.........

     2,我把代码中引用的bomManageMapper全部注释掉,又会出现另外一个Mapper对象找不到

     3,但是奇怪的是,有两个项目启动的时用到的Mapper对象可以找到,发现这两个Mapper对象是在项目的core包下面,而其他找不到的Mapper对象都在interfaces包下面;

二、寻找答案

     1,怀疑是昨天修改了什么东西,导致的这个问题(具体也记得不清楚了,所以版本控制真的很重要,而且做好是每天都要提交);

     2,试图还原昨天的修改,删除一些新增内容,但是问题依旧;

     就这样折腾了一上午;

三、解决

  打开了spring的配置文件看看,有这一行,扫描Mapper和dao类:   

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"    p:basePackage="com.skysport.*.dao" p:sqlSessionFactoryBeanName="sqlSessionFactory" />

   就是这个dao,突然想到,昨天把interfaces的包中的‘dao’文件夹重命名为‘mapper’,而core包中的还是dao包,好吧,问题原因找到了。

   重命名core包中的dao包为mapper包,重启服务,恢复正常;

四、一点思考:

     1,关于定位问题:

             如果之前没有出现,而是做了某些修改后,才出现的问题,那么肯定是修改动作导致的。

     2,关于版本控制:

             养成按天提交代码的习惯,这样可以对比出来每天修改的内容,便于定位问题;

     3,关于修改:

            在修改一项内容时,一定要评估它带来的影响有多大,我觉得可以从两个角度去衡量:

            a),可量化的:修改一项内容,如果直接影响到很多文件修改,那么一定要慎重,要评估风险(例如:是否每个涉及到的地方都修改了)

            b),不可量化:例如修改了代码的加锁机制,可能影响的就一、两个类,那么就要靠开发者的自身能力和足够的测试去规避风险了。

 

posted @ 2015-07-16 13:50  星空中的启明星  阅读(1341)  评论(0编辑  收藏  举报