问题
同一个测试案例,分别在STS和IDEA下正常跑起来,并成功断点到同一位置。结果,STS跑案例时,外部能够正常连接到H2数据库;而IDEA跑案例时跑到断点时,则无法连接上H2数据(奇怪的是端口能够PING通),然后一直显示“Connecting Wait…”。
背景
由于项目组技术的升级和管理的需要,我们的代码版本控制工具由SVN改成了GIT,整个代码包的服务端都迁移了过去。本人觉得在STS(由ECLIPES包装而来)开发工具上使用GIT插件提交和发布代码非常不方面,与此同时看到网上很多人推崇更强大、更便捷的intelliJ IDEA上来开发java应用程序,于是我决定切换过去试试。需要说明的是,我们项目的本地测试数据源配置为H2,在Debug模式下跑JUNIT单元测试案例的时候会利用DbVisualizer等外部工具用TCP模式连接到H2数据库。
解决过程
- 在IDEA中重配H2为不同端口不行
- 使用IDEA内置数据库连接器TCP模式也不行
- 更换IDEA内置数据库连接器中连接的驱动版本和模式还不行
- 网上查资料,因为别人大多使用H2的In-memory和Embedded模式,而我的是TCP模式,谷歌和百度上基本没有类似的问题,仍然不行。
- 最后恰巧碰到了《IDEA 和 Eclipse 调试多线程应用》这篇文章(虽然问题起点不一样,但是分析原因是相同的)得以解决,否则我可能就放弃了IDEA
根本原因
IDEA默认在进行多线程调试的时候,会阻塞其他所有线程,所以应该就是断点的时候阻塞了H2连接的线程导致。文章中的说明是IDEA和Eclipse的调试策略默认情况下配置不同:
- IDEA默认是ALL级别
- Eclipse默认是Thread级别
解决办法
重新设置IDEA中的调试级别保持与STS中的一致就OK了!
参考资料
本文链接: https://www.xiajunyi.com/pages/p52.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!