The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
昨天晚上开发时遇到了一个错误,突然出现的,之前好好的
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
我当时是用调试模式启动了项目,就出现了这种问题,最后发现可能我不小心给service接口上的方法加上了方法断点,导致它出现了这种问题。
注意:不要给 方法上带着断点去启动项目,这会拖延你的项目启动时间!!!
至于为什么拖延时间,我浏览了一些资料发现方法断点是通过使用 JDPA 的 Method Entry & Method Exit 特性实现的。
这个实现,要求 JVM,每次,在任何(any)线程进入任何(any)方法时,以及在任何(any)线程退出任何(any)方法时触发事件。
当启用了method entry和method exit:
1. IDE将断点添加到内部方法断点LIST中
2.IDE告诉调试器开启methodentry和method exit事件
3.调试器通过代理将请求传递给VM
4.在每个method entry和method exit事件中,通过整个链将通知转发到IDE
5.IDE检查其方法断点LIST是否包含当前的整个方法
6.如果发现包含,就表示整个方法上有方法断点,则IDE将向VM发送SetBreakpoint请求,打上断点。否则vm的线程将被释放,不会发生任何事情。
总的来说:
方法断点不是JPDA的特性而是ide的特性,方法断点极大的影响调试程序,所以只有真正需要需要使用它们才使用,如果必须使用方法作为断点的话可以考虑关闭 method exit事件。
在方法断点上右键可以看到这个界面,其中就有method exit和method entry
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话