Spring boot как использовать автоконфигурацию Hikari, но установить имя пользователя / пароль во время выполнения - PullRequest
0 голосов
/ 27 августа 2018

Я использую Spring boot 2.0.1 с Hikari CP и хочу использовать свойства приложения для установки таких свойств источника данных Hikari, как время ожидания подключения, максимальный размер пула и т. Д., Но имя пользователя и пароль должны быть установлены во время выполнения. Я попробовал ниже, но когда источник данных создан, у него нет значения тайм-аута соединения, которое я пытаюсь установить.

Ниже приведен код для bean источника данных.

@Value("${spring.datasource.url}")
private String url;

@ConfigurationProperties(prefix = "spring.datasource.hikari")
@Bean
public DataSource dataSource() throws Exception {
    //User name and password is fetched from some other data storage

    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setJdbcUrl(url);
    hikariConfig.setUsername(username);
    hikariConfig.setPassword(password);

    //The data source created here doesn't have connection timeout value 
    //set by me
    return new HikariDataSource(hikariConfig);
}

Ниже находится файл свойств моего приложения

spring.datasource.url={Our DB URL}
   spring.datasource.hikari.maximumPoolSize=100
   spring.datasource.hikari.idleTimeout=30000
   spring.datasource.hikari.poolName=SpringBootJPAHikariCP
   spring.datasource.hikari.connectionTimeout=40000
   spring.datasource.hikari.driver-class- 
   name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider

Я упоминал ниже документацию Spring, но в ней просто говорится об автоматической настройке свойств, таких как url ​​и учетные данные (которые работали), но не об истечении времени ожидания соединения и простоя и т. Д.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-configure-a-datasource

Пожалуйста, дайте мне знать, если я что-то упустил.

1 Ответ

0 голосов
/ 27 августа 2018
  @ConfigurationProperties(prefix = "spring.datasource.hikari")
  @Bean
  @Primary
  public DataSource dataSource(String username,String password) {
     return DataSourceBuilder.create().username(username).password(password).build();
  }

и используйте их в файле yml / property без указания имени пользователя и пароля.

spring:
    profiles: dev
    # Development database configuration
    datasource.hikari:
        driverClassName: oracle.jdbc.driver.OracleDriver
        jdbcUrl: jdbc:oracle:thin:@url:1621:sid
        type: com.zaxxer.hikari.HikariDataSource
        connectionTimeout:40000

Это будет работать. Дайте мне знать, если это не сработает для вас.

...