代码之家  ›  专栏  ›  技术社区  ›  Ketan

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

  •  2
  • Ketan  · 技术社区  · 6 年前

    我将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 回复  |  直到 6 年前
        1
  •  0
  •   Anand Varkey Philips Rohit upadhyay    6 年前
      @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
    

    这会奏效的。如果对你不起作用,告诉我。