渴望初始化连接池和自定义超时值
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 语句,这需要创建和初始化底层池以上是关于渴望初始化连接池和自定义超时值的主要内容,如果未能解决你的问题,请参考以下文章