处理 HicariCP Oracle 连接尝试

问题描述 投票:0回答:2

我想我有一个接近默认的 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
java oracle-database jdbc hikaricp
2个回答
1
投票

https://github.com/brettwooldridge/HikariCP/issues/312,正如本期末尾所解释的,HikariCP 将不断尝试获取连接。它故意删除了 acquireRetries 参数。 所以方法是配置正确的用户名/密码,因为数据库仅在身份验证失败后锁定。

这是从问题中摘录的。 HikariCP打算永远重试。

回到 acquireRetries...没有 acquireRetries 的概念,如何 专用线程继续尝试创建新线程多久 联系? 永远。后台创建线程会继续 尝试永远向池中添加连接,或者直到三个连接之一 满足条件:


0
投票

我遇到了同样的问题,我可以使用以下属性解决它。

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,并使用错误密码运行具有上述属性的示例程序三次。第四次,我收到账户被锁定的消息。

© www.soinside.com 2019 - 2024. All rights reserved.