Spring boot 如何使用 Hikari 自动配置但在运行时设置用户名/密码

问题描述 投票:0回答:1

我正在使用带有 Hikari CP 的 Spring boot 2.0.1,并希望使用应用程序属性来设置 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

如果我遗漏了什么,请告诉我。

spring-boot spring-data hikaricp
1个回答
0
投票
  @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

这会起作用。如果它不适合您,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.