【问题标题】:Spring boot hikaricp connection-timeout vs connectionTimeoutSpring boot hikaricp connection-timeout vs connectionTimeout
【发布时间】:2021-02-10 14:36:37
【问题描述】:

当我谷歌 Hikaricp 连接属性时,我发现了两个主要区别,例如:

https://www.javadevjournal.com/spring-boot/spring-boot-hikari/

https://www.baeldung.com/spring-boot-hikari

spring.datasource.hikari.connection-timeout = 20000
spring.datasource.hikari.connectionTimeout=30000

当我查看https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby

我找不到'''.connection-timeout'''

connection-timeout 与 connectionTimeout 有什么区别?

这是我在网上发现的差异之一。 ????

【问题讨论】:

  • connection-timeout 可能是 e 弃用或拼写错误,我不会担心它并使用 hikari wiki (connectionTimeout) 中所述的那个
  • 没有区别,它们绑定到同一个属性。您可以使用camel-case 或kebab-case,Spring Boot 喜欢将其称为轻松绑定。 the documentation 中也对此进行了解释。

标签: spring-boot hikaricp


【解决方案1】:

这是 Hikari 中的实际代码 - 设置配置,实际属性为 connectionTimeout。在 Spring 配置中提供此设置时,Spring 很可能会通过 setter 调用它

public class HikariConfig implements HikariConfigMXBean
{
.....................
.....................

private volatile long connectionTimeout;

/** {@inheritDoc} */
   @Override
   public long getConnectionTimeout()
   {
      return connectionTimeout;
   }

   /** {@inheritDoc} */
   @Override
   public void setConnectionTimeout(long connectionTimeoutMs)
   {
      if (connectionTimeoutMs == 0) {
         this.connectionTimeout = Integer.MAX_VALUE;
      }
      else if (connectionTimeoutMs < 250) {
         throw new IllegalArgumentException("connectionTimeout cannot be less than 250ms");
      }
      else {
         this.connectionTimeout = connectionTimeoutMs;
      }
   }

【讨论】:

    【解决方案2】:

    Spring Boot 使用了他们称之为relaxed binding 的东西,并且这些属性中的每一个最终都会出现在同一个地方。 HikariDataSourceconnectionTimeout 属性。

    事实上,您也可以使用_,或者在提供环境变量时使用大写名称。

    spring.datasource.hikari.connection-timeout=20000
    spring.datasource.hikari.connection_timeout=20000
    spring.datasource.hikari.connectionTimeout=30000
    SPRING_DATASOURCE_HIKARI_CONNECTIONTIMEOUT=30000
    

    所有上述属性最终都会绑定到HikariDataSource.connectionTimeout 属性。它们都是相同的不同表示。后者主要是为了克服Linux/Mac环境变量中不能使用-的限制。

    【讨论】: