【问题标题】:Eager Initializing Connection Pool & Custom Timeout Value渴望初始化连接池和自定义超时值
【发布时间】:2015-03-10 17:09:52
【问题描述】:

我正在使用 Tomcat JDBC 连接池(这是 Spring Boot 的默认设置)来管理与我的 PostgreSQL 集群的连接,我只是注意到只有在进行第一次查询时才会创建该池。我的问题是双重的:

  1. 是否有任何优雅的方法可以强制创建池(即在启动应用程序时)?我相信在启动时执行一个简单的查询就可以解决问题,但如果可以的话,我更喜欢更优雅的方式。
  2. 在我的一项测试中,我使用iptables 删除了指向 PostgreSQL 集群的所有流量。这导致第一个查询持续了大约 127 秒,然后以消息 Unable to create initial connections of pool 失败。 127秒太多了。有什么办法可以为超时设置一个较低的值吗?我已经阅读了docs,但无法得出太多结论。

【问题讨论】:

    标签: java spring jdbc spring-boot tomcat-jdbc


    【解决方案1】:

    好吧,对于你的第一个问题,我只能想到两种方法:

    关于你的第二个问题;如果您为第一个问题选择第二种方法,它将自动解决。但你总是可以设置

    spring.datasouce.max-wait

    参数。在 Tomcat Pool 文档中它说

    (int) 池将等待(当没有可用连接时)在抛出异常之前返回连接的最大毫秒数。默认值为 30000(30 秒)

    但在你的情况下,它是 127 秒,这很奇怪..

    【讨论】:

    • 指的是数据库初始化(模式创建和表填充),而不是池初始化。此外,提供initSQL 不会以任何方式强制创建池。
    • 我知道,但是要初始化数据库,您可以使用任何类型的 sql 语句,这需要创建和初始化底层池
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多