开发者社区> 问答> 正文

ConnectTimeout 默认值不生效

在 DruidDataSource 的 init 方法中 , if (connectTimeout == 0) { socketTimeout = DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS; } 当不设置 connectTimeout 属性时,是否有错误?

原提问者GitHub用户xlofhappy

展开
收起
山海行 2023-07-05 17:49:43 503 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Druid 数据库连接池中,如果不设置 connectTimeout 属性,则会使用默认值 0,表示连接超时时间未设置。在 init 方法中,如果连接超时时间为 0,则会使用默认值 DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS,即 30 秒。

    从代码实现上看,这并没有错误。因为如果不设置连接超时时间,连接操作可能会一直阻塞,直到连接成功或失败。这可能会导致应用程序的性能和稳定性受到影响,特别是在高并发场景下。因此,建议在使用 Druid 数据库连接池时,设置合适的连接超时时间,以提高应用程序的性能和稳定性。

    2023-07-30 21:19:43
    赞同 展开评论 打赏
  • 在init()方法中,connectTimeout和socketTimeout是两个不同的属性,它们分别表示连接超时和套接字超时。这两个属性在连接池的配置中具有不同的含义。

    connectTimeout表示从连接池获取连接的超时时间。如果获取连接的操作在指定的时间内未完成,将抛出java.sql.SQLTimeoutException异常。默认情况下,connectTimeout的值为0,表示没有超时限制。
    socketTimeout表示在与数据库服务器建立连接后,发送和接收数据的超时时间。如果在指定的时间内没有数据传输,将抛出java.net.SocketTimeoutException异常。默认情况下,socketTimeout的值为0,表示没有超时限制。

    2023-07-09 10:06:35
    赞同 展开评论 打赏
  • 得自己设置connectTimeout =-1避开bug了

    原回答者GitHub用户scdhao

    2023-07-06 10:36:07
    赞同 展开评论 打赏
  • 当不设置 connectTimeout 属性时,并不会引发错误。在 DruidDataSource 的初始化方法中,当 connectTimeout 未被显式设置时,默认值为0,表示没有设定连接超时时间。因此,在这种情况下,if (connectTimeout == 0) 条件将成立,将 socketTimeout 设置为默认的连接超时时间,即 DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS。这样做是为了确保在未设置连接超时时间时,仍然能够使用一个合理的默认值来允许连接建立操作。

    2023-07-05 19:18:38
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载