不懂就问, 如果调用 JDBC 的 commit 方法时, 由于网络波动,丢包等原因, 数据库没收到 commit 请求, 应用会一直等待吗?(好像没看到 commit timeout 等设置). 如果一直等待就会锁住很多数据呢. 忽略 druid 的 removeAbandoned 等配置.
1
zhuawadao 2021-01-06 23:59:16 +08:00
数据库自己有设置默认超时时间,innodb 默认好像是 50s 。如果断开连接了,也会结束事务的。
|
2
xx6412223 2021-01-07 10:50:59 +08:00
可以查一下 wait_timeout 的定义,这个 timeout 触发的结果是关闭一个连接,还有 net_read_timeout 这是对一个 mysql request 包的 timeout, 这个触发结果就是忽略一次请求。
两者结合起来,server 端就可以防止 idle 的 client 占用资源。当然客户端的连接池希望一直维护一些连接,一般情况会发送心跳语句比如 select 1 from XX 对于 client,spring 有设置 transaction timeout 可以控制,如果触发这个 timeout,客户方会发送 rollback 请求 |