首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用参数化自定义驱动程序类构造DB DataSource?

如何使用参数化自定义驱动程序类构造DB DataSource?
EN

Stack Overflow用户
提问于 2020-10-09 23:34:47
回答 1查看 474关注 0票数 1

在Spring应用程序中,我连接到Postgres。对于特定的需求,我需要使用参数化的DriverClass,它是org.postgresql.Driver的子类。

如何使用参数化的DataSource构造driverClass对象?

代码语言:javascript
复制
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.apps.CustomPostgresqlDriver") // Not sure how to pass a string argument to its constructor
.build()

客户驱动程序com.apps.CustomPostgresqlDriver的定义如下。

代码语言:javascript
复制
Public class CustomPostgresqlDriver implements Driver {

   public void CustomPostgresqlDriver(String appParam){

      ....
   }
...

}

我看不出有任何选项可以用上面的1-Arg构造函数来实例化驱动程序(或者让Spring实例化)。示例:

new CustomPostgresqlDriver("my-app-db-param")

EN

回答 1

Stack Overflow用户

发布于 2020-10-10 02:04:42

您可以使用DataSourceBuilder来完成这个任务:第一个配置,application.yml中的两个不同的ds设置,如下所示:

代码语言:javascript
复制
spring:
  datasource:
    main: 
      driver-class-name: ${ds.driver}
      url: ${ds.url}
      username: ${ds.username}
      password: ${ds.password}
      hikari:
        maximum-pool-size: ${ds.maximum.pool.size}
        minimum-idle: ${ds.minimum.idle}
        connection-timeout: 10000
        connection-test-query: SELECT 1
    read:
      driver-class-name: ${ds.driver}
      url: ${ds.read.url}
      username: ${ds.read.username}
      password: ${ds.read.password}
      hikari:
        maximum-pool-size: ${ds.read.maximum.pool.size}
        minimum-idle: ${ds.read.minimum.idle}
        connection-timeout: 10000
        connection-test-query: SELECT 1

第二种方法是向它们注入DataSourceBuilder,如下所示:

代码语言:javascript
复制
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;

    @Primary
    @Bean
    @ConfigurationProperties("spring.datasource.main")
    public DataSource main() {
        return DataSourceBuilder.create().build();
    }
 
 
    @Bean
    @ConfigurationProperties("spring.datasource.read")
    public DataSource read() {
        return DataSourceBuilder.create().build();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64288534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档