环境:Spring + Druid + Mybatis
异常情况:dataSource
初始化成功后,程序仍然是运行状态,日志不再打印,并且没有任务异常信息打印
为什么出现这种情况?如何去发现哪里出现了异常?
出现这种情况的原因有很多,可能是某个Bean
初始化时失败了,也可能是Mybatis
解析mapper.xml
时出现了异常,或者其他我还未遇见的原因,看源码时发现抛异常了,只是某个环节没有将异常打印出来。
想要找到异常的根源,最简单的方法就是去Debug
一步一步调试。
我遇到的情况是Mybatis
解析mapper.xml
文件时出现了异常,具体情况:
定义mapper.xml
时,出现了同名的mapper文件,并且各文件中定义了相同的id
的resultMap
。Mybatis
的mapper.xml
文件可以看做Dao
层的实现,Dao
层不支持方法重载,并且对于相同名称的mapper.xml
文件,文件中也不能有id
相同的sql
片段,当然同一个文件中也不能有相同id
的sql
片段。
我调试的过程:
- 首先我并不知道出现了什么异常,但是我知道程序最后打印的地方是
OK
的,即com.alibaba.druid.pool.DruidDataSource:947 - {dataSource-1} inited
- 找到
DruidDataSource
的947
行所在的方法,从这个方法开始调试 - 重启程序,接着一步一步调试,直到走到抛出异常的代码
如果Spring
没有成功启动,并且没有任何异常时,大多数情况都是初始化Bean
时抛出了异常,由于某些原因导致异常信息没被打印,我们可以直接找到AbstractAutowireCapableBeanFactory#doCreateBean
方法,在catch
处打断点,一般情况下都有异常信息的。