我想我有一个接近默认的 HicariConfiguration 和 MaximumPoolSize(5)。 我面临的问题是有很多尝试连接到数据库,即使第一次失败。我的意思是,例如,我要用来连接到 Oracle 的密码是错误的,连接失败,但随后我们又尝试连接到数据库,结果锁定了帐户。
问题:应该使用什么 HicariCP 设置来限制最多 1 次尝试连接?
感谢您提供任何信息!
### 更新env.conf:
jdbc {
test1 {
datasourceClassName="oracle.jdbc.pool.OracleDataSource"
dataSourceUrl=.....jdbc url
dataSourceUser=USER
dataSourcePassword=password
setMaximumPoolSize = 5
setJdbc4ConnectionTest = true
}
}
通过ConfigFactory读取conf文件,并根据conf文件(setDriverClassName等)创建HicariConfig。 HikariConfig 的输出:
autoCommit.....................true
connectionTimeOut..............30000
idleTimeOut....................600000
initializationFailFast.........false
isolateInternalQueries.........false
jdbc4ConnectionTest............test
maxLifetime....................1800000
minimumIdle....................5
https://github.com/brettwooldridge/HikariCP/issues/312,正如本期末尾所解释的,HikariCP 将不断尝试获取连接。它故意删除了 acquireRetries 参数。 所以方法是配置正确的用户名/密码,因为数据库仅在身份验证失败后锁定。
这是从问题中摘录的。 HikariCP打算永远重试。
回到 acquireRetries...没有 acquireRetries 的概念,如何 专用线程继续尝试创建新线程多久 联系? 永远。后台创建线程会继续 尝试永远向池中添加连接,或者直到三个连接之一 满足条件:
我遇到了同样的问题,我可以使用以下属性解决它。
spring.datasource.hikari.connection-timeout=250
这里 spring.datasource 是我识别属性的前缀。
我不能在 hikari.connection-timeout=250 中给出小于 250 的值。
另一个有用的属性是initializationTimeout,它的默认值为1
根据代码,HikariPool.java,如果初始化超时> 0,程序流程将停止
if (initializationTimeout > 0) {
throwPoolInitializationException(getLastConnectionFailure());
}
根据 HikariCP 文档 https://github.com/brettwooldridge/HikariCP
初始化失败超时 此属性控制如果池无法成功使用初始连接进行播种,池是否会“快速失败”。任何正数都被视为尝试获取初始连接的毫秒数;在此期间应用程序线程将被阻塞。如果在此超时之前无法获取连接,则会抛出异常。此超时在连接超时期限之后应用。如果该值为零 (0),HikariCP 将尝试获取并验证连接。如果获得连接但验证失败,则会抛出异常并且池不会启动。但是,如果无法获取连接,池将启动,但稍后获取连接的努力可能会失败。小于零的值将绕过任何初始连接尝试,并且池将在尝试在后台获取连接时立即启动。因此,稍后获取连接的努力可能会失败。 默认:1
为了验证行为,我在 Oracle 中创建了一个用户,最大失败连接尝试次数为 3,并使用错误密码运行具有上述属性的示例程序三次。第四次,我收到账户被锁定的消息。