【问题标题】:How to override default connection pool limit in spring boot 2.0.x如何在 Spring Boot 2.0.x 中覆盖默认连接池限制
【发布时间】:2019-08-15 08:51:37
【问题描述】:

在我的项目中,我们使用的是 spring boot 2.0.3.Release。我们已经配置了多个数据源,默认情况下 Spring Boot 选择 Hikari 数据源作为连接池。下面是我的代码。

application.properties

first.datasource.jdbcUrl=jdbc:sqlserver://localhost:1433;databaseName=test1
first.datasource.username=admin
first.datasource.password=admin
first.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDeriver
 first.datasource.hikari.maximumlPoolSize=50
# Second Datasource
second.datasource.jdbcUrl=jdbc:postgresql://db-server-bar:5432/test2
second.datasource.username=admin
second.datasource.password=admin
second.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDeriver
 second.datasource.hikari.maximumlPoolSize=50

FirstConfig.java

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  entityManagerFactoryRef = "entityManagerFactory",
  basePackages = { "com.org.first.repo" }
)
public class FirstConfig {

  @Primary
  @Bean(name = "dataSource")
  @ConfigurationProperties(prefix = "first.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Primary
  @Bean(name = "entityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  entityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("dataSource") DataSource dataSource
  ) {
    return builder
      .dataSource(dataSource)
      .packages("com.org.first.entity")
      .persistenceUnit("first")
      .build();
  }

  @Primary
  @Bean(name = "transactionManager")
  public PlatformTransactionManager transactionManager(
    @Qualifier("entityManagerFactory") EntityManagerFactory 
    entityManagerFactory
  ) {
    return new JpaTransactionManager(entityManagerFactory);
  }
}

SecondConfig.java

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  entityManagerFactoryRef = "barEntityManagerFactory",
  transactionManagerRef = "barTransactionManager",
  basePackages = { "com.org.second.repo" }
)
public class SecondConfig{

  @Bean(name = "barDataSource")
  @ConfigurationProperties(prefix = "second.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "barEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  barEntityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("barDataSource") DataSource dataSource
  ) {
    return
      builder
        .dataSource(dataSource)
        .packages("com.org.second.entity")
        .persistenceUnit("second")
        .build();
  }
  @Bean(name = "barTransactionManager")
  public PlatformTransactionManager barTransactionManager(
    @Qualifier("barEntityManagerFactory") EntityManagerFactory
    barEntityManagerFactory
  ) {
    return new JpaTransactionManager(barEntityManagerFactory);
  }
}

配置没有选择我在属性文件中设置的最大池大小。当我签入显示为 10 的数据源对象时。如何覆盖 hikari 数据源中设置的默认值?

【问题讨论】:

    标签: java spring spring-boot hikaricp


    【解决方案1】:
    @Configuration
    @ConfigurationProperties(prefix = "params.datasource")
    public class JpaConfig extends HikariConfig {
    
        @Bean
        public DataSource dataSource() throws SQLException {
            return new HikariDataSource(this);
        }
    
    }
    

    application.yml

    params:
      datasource:
        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDeriver
        jdbcUrl: jdbc:sqlserver://localhost:1433;databaseName=test1
        username: login
        password: password
        maximumPoolSize: 5
    

    【讨论】:

    • 谢谢。这正是我想要的。
    【解决方案2】:

    如我所见,您还没有添加数据源属性 bean。

    请制作一个 dataSourceProperties bean。

     @Bean
      @Primary
      @ConfigurationProperties(prefix = "first.datasource")
      public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
      }
    
      @Primary
      @Bean(name = "dataSource")
      @ConfigurationProperties(prefix = "first.datasource")
      public DataSource dataSource() {
        return dataSourceProperties().initializeDataSourceBuilder().build();
      }
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 1970-01-01
      • 2014-09-15
      • 2016-06-06
      • 2015-08-30
      • 1970-01-01
      • 2019-05-15
      • 2018-06-13
      • 2016-08-20
      相关资源
      最近更新 更多