简体   繁体   中英

How to override default connection pool limit in spring boot 2.0.x

In my project we are using spring boot 2.0.3.Release. We have configured multiple data sources, by default spring boot picks Hikari datasource for connection pool. Below is my code.

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);
  }
}

The configuration is not picking my maximum pool size that I set in the properties file. When I check in the data source object which is showing as 10. How do I override the default values set in the hikari datasource?

@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

As I can see, you haven't added datasource property bean.

Please make a 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();
  }

This works for me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM