当前位置: 首页 > 知识库问答 >
问题:

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

冯茂实
2023-03-14

我正在使用带有Hikari CP的Spring Boot2.0.1并希望使用应用程序属性来设置Hikari数据源属性,如连接超时、最大池大小等,但用户名和密码应该在运行时设置。我在下面进行了尝试,但当数据源创建时,它没有我试图设置的连接超时值。

@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

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

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

共有1个答案

薛经纶
2023-03-14
  @ConfigurationProperties(prefix = "spring.datasource.hikari")
  @Bean
  @Primary
  public DataSource dataSource(String username,String password) {
     return DataSourceBuilder.create().username(username).password(password).build();
  }

并在yml/property文件中使用它们,而不给出username和password属性。

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

这会管用的。如果对你不起作用就告诉我。

 类似资料:
  • 问题内容: 我有一个问题,我只能使用一个数据库,但我有多个服务器,希望它们为每个服务器使用不同的表名。 现在,我的班级配置为: 我希望能够使dev1服务器指向loader_queue_dev1表,例如dev2服务器指向loader_queue_dev2表。 有没有可以使用注释或不使用注释的方法? 我希望能够拥有一个单一的构建,然后在运行时使用诸如系统属性之类的东西来更改该表名。 问题答案: 对于H

  • 我正在使用java web应用程序使用rtsp从IP摄像机中检索视频;rtsp url在url本身中嵌入了用户名/密码,这似乎很不安全。例如,rtsp:/user:password@ip/... 是否有一种方法可以防止在URL中发送用户名/密码。 保护URL的最好方法是什么?

  • 我写了一个应用程序,使用Spring MongoRepository连接到产品销售的集合,其中包含所有产品的销售数据。 现在,我面临一个问题,因为我现在有多个产品销售集合,而不是一个集合,每个集合包含一个产品。所有集合的结构仍然相同,但现在每个集合的名称类似于“Sales_123”、“Sales_456”,其中数字后缀是产品Id。 这意味着我不能再使用文档注释来指定集合名称。我仍然可以在运行时将集

  • 我正在寻找一种在testng运行期间设置启动名称的方法。这在配置(rp.launch)中另有设置。我需要为每个testng运行设置一个自定义启动名称。我正在使用代理java testng:4.0.0-BETA-1 我尝试了建议的替代方法,但找不到此处提到的类-ConfigurationModule 我有一个自定义侦听器(ReportPortalTestNGListener),我正在将其添加到Tes

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类