渴望初始化连接池和自定义超时值

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

Tomcat Pool的initSQL方法,你已经提到了。 请参阅http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html。 Spring 提供了一些机制来初始化 DB 和 failfast。我想你可以用这个。

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

spring.datasouce.max-wait

参数。在 Tomcat Pool 文档中它说

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

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

【讨论】:

指的是数据库初始化(模式创建和表填充),而不是池初始化。此外,提供initSQL 不会以任何方式强制创建池。 我知道,但是要初始化数据库,您可以使用任何类型的 sql 语句,这需要创建和初始化底层池

以上是关于渴望初始化连接池和自定义超时值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL自定义数据库连接池和开源数据库连接池的使用

按元框值自定义帖子类型查询

如何根据预先确定的约束值自定义热图颜色?

Spring Batch 连接池和多线程

如何在codeigniter普通mysql和自定义pdo中运行并发数据库连接[重复]

Combobox值自定义(不通过数据库)