V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
godigmh
V2EX  ›  程序员

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

  •  
  •   godigmh · 2021-01-06 23:34:39 +08:00 · 1441 次点击
    这是一个创建于 1417 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2021-01-07 10:50:59 +08:00
    zhuawadao
        1
    zhuawadao  
       2021-01-06 23:59:16 +08:00
    数据库自己有设置默认超时时间,innodb 默认好像是 50s 。如果断开连接了,也会结束事务的。
    xx6412223
        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 请求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   994 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.