不懂就问. JDBC commit 超时怎么办

2021-01-06 23:34:39 +08:00
 godigmh

不懂就问, 如果调用 JDBC 的 commit 方法时, 由于网络波动,丢包等原因, 数据库没收到 commit 请求, 应用会一直等待吗?(好像没看到 commit timeout 等设置). 如果一直等待就会锁住很多数据呢. 忽略 druid 的 removeAbandoned 等配置.

1457 次点击
所在节点    程序员
2 条回复
zhuawadao
2021-01-06 23:59:16 +08:00
数据库自己有设置默认超时时间,innodb 默认好像是 50s 。如果断开连接了,也会结束事务的。
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 请求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742363

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX