Mybatis破MySql8小时断线问题1

preview
需积分: 0 4 下载量 18 浏览量 更新于2022-08-08 收藏 313KB DOCX 举报
标题 "Mybatis破MySql8小时断线问题1" 指的是在使用Mybatis框架与MySQL数据库交互时遇到的一个常见问题,即由于MySQL数据库的连接超时机制导致的8小时断线。描述中提到,当数据库连接闲置时间超过MySQL默认设定的8小时后,数据库会主动关闭这个连接。然而,如果使用JDBC或连接池的客户端仍尝试使用这个已断开的连接,就会引发异常。 MySQL的这个超时机制是由系统变量`wait_timeout`控制的,单位为秒。默认设置是8小时(28800秒),但最大可设置为31536000秒,即一年。设置较大的等待时间虽然可以减少因闲置而断开的连接,但这并不是最佳解决方案,因为长期保持无活动的连接不仅可能导致数据库性能下降,还会占用宝贵的内存资源,甚至可能导致数据库连接数耗尽。 为了更有效地处理这个问题,通常采取的方法是在使用可能已经闲置的连接前进行ping操作,确保连接仍然有效。Mybatis自带的连接池支持这样的功能。通过以下三个配置属性可以启用和定制ping机制: 1. `poolPingEnabled` - 默认值为false,将其设为true即可开启ping机制。 2. `poolPingQuery` - 定义一个用于ping数据库的SQL语句,通常使用简单的“SELECT 1”或“SHOW VARIABLES LIKE 'version'”等无害的查询。 3. `poolPingConnectionsNotUsedFor` - 默认值为0,表示毫秒,设置为非零值后,只有那些闲置时间超过这个值的连接才会在被使用前进行ping检查。例如,设置为3600000(1小时)意味着如果连接在过去一小时内未使用,那么在再次使用前会执行ping操作。 启用ping机制可以避免不必要的异常,同时减少了对数据库的额外负担,因为它仅在必要时进行ping检查。这种方法优于简单地增加`wait_timeout`,因为它更灵活且节省资源。在高并发或者低活跃度的系统中,正确配置这些参数对于维持数据库连接的稳定性和效率至关重要。