Как переопределить ограничение пула соединений по умолчанию в весенней загрузке 2.0.x - PullRequest
0 голосов
/ 25 марта 2019

В моем проекте мы используем весеннюю загрузку 2.0.3. Выпуск.Мы настроили несколько источников данных, по умолчанию весенняя загрузка выбирает источник данных 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?

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Как я вижу, вы не добавили bean-компонент свойства источника данных.

Пожалуйста, создайте bean-компонент dataSourceProperties.

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

Это работает для меня.

0 голосов
/ 25 марта 2019
@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
...