【问题标题】:Set maxConnectionLimit to Manually created connection using Spring DataSourceBuilder.create()使用 Spring DataSourceBuilder.create() 将 maxConnectionLimit 设置为手动创建的连接
【发布时间】:2020-10-02 11:26:51
【问题描述】:

使用 application.properties 我们可以提供

spring.datasource.hikari.maximum-pool-size=10

默认情况下使用 Hikari 连接池作为 spring。 但是,当我们根据特定要求手动创建数据源时,我们不能使用 application.properties。

情景。

  1. 用户将动态配置数据源,此后该连接对象应可用。
  2. 为此,我们正在创建 DatasourceBuilder.create().build() 方法来创建数据源连接对象并将其设置到 bean 工厂中。
  3. 但在使用 DataSourceBuilder.create().build() 方法创建数据源连接对象时,它会同时创建连接池和 10 个与数据库的连接。
  4. 我们希望避免这种连接中断,并且只有一个连接。

我该怎么做?

【问题讨论】:

    标签: java spring spring-boot connection-pooling spring-jdbc


    【解决方案1】:

    您可以尝试设置 minimumIdle 属性。默认情况下,它设置为 maxPoolSize,因此最初创建 10 个连接。

    您可以参考此链接中的 minimumIdle 部分,https://github.com/brettwooldridge/HikariCP#frequently-used

    【讨论】:

      【解决方案2】:

      在创建自定义数据源时,我们可以创建 HikariDataSource 的实例而不是 DataSource。

      假设您使用的是 Spring 默认连接池 (Hikari)

      public DataSource createCustomConnection(String driverClass, String url, String username, String password) { 
          HikariConfig config = new HikariConfig();
              config.setDriverClassName(driverClass);
              config.setJdbcUrl(url);
              config.setUsername(username);
              config.setPassword(password);
              config.setMaximumPoolSize(MENTIONED_TOTAL_CONNECTIONS);
              // Like this you can configure multiple properties here 
              
          HikariDataSource dataSource = new HikariDataSource(config);
          return dataSource;
      }
      DataSource dataSource = createCustomConnection(...) // Pass Parameters here
      

      在这里,您已经创建了同时创建单个连接的数据源。

      更多信息https://github.com/brettwooldridge/HikariCP#initialization

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 2018-08-31
        • 2022-01-23
        • 1970-01-01
        • 2019-03-15
        相关资源
        最近更新 更多