Java Spring Boot中的多租户

Java Spring Boot中的多租户,java,spring,spring-boot,spring-jdbc,Java,Spring,Spring Boot,Spring Jdbc,我在创建可以动态连接到多个数据库的spring引导应用程序时遇到问题,具体取决于用户输入。基本上,应用程序在不同的数据库上运行相同的sql查询。建模尝试之后,我收到以下错误: 2018-04-10 16:18:50.678 ERROR 15716 --- [ restartedMain] com.zaxxer.hikari.HikariConfig : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl i

我在创建可以动态连接到多个数据库的spring引导应用程序时遇到问题,具体取决于用户输入。基本上,应用程序在不同的数据库上运行相同的sql查询。建模尝试之后,我收到以下错误:

2018-04-10 16:18:50.678 ERROR 15716 --- [  restartedMain] com.zaxxer.hikari.HikariConfig           : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
--

配置类:

@Configuration
public class ReconDBConfig {


@ConfigurationProperties(prefix = "spring.datasource.foo")
@Bean
@Primary
public DataSource fooDataSource() {
    return DataSourceBuilder
            .create()
            .build();
}

@ConfigurationProperties(prefix = "spring.datasource.bar")
@Bean
public DataSource barDataSource() {
    return DataSourceBuilder
            .create()
            .build();
}
}
属性文件:

spring.datasource.foo.url        =     jdbc:postgresql://localhost:5432/fooDB
spring.datasource.foo.user       =  admin
spring.datasource.foo.password   =  admin
spring.datasource.foo.driver     =  org.postgresql.Driver
spring.datasource.foo.maxconn    =  5
spring.datasource.foo.expiry     =  180
spring.datasource.foo.cache      =  true
spring.datasource.foo.retry      =  3
spring.datasource.foo.retrydelay =  30

spring.datasource.bar.url        =     jdbc:postgresql://not_localhost:5432/fooDB
spring.datasource.bar.user       =  definitely_not_admin
spring.datasource.bar.password   =  definitely_not_admin
spring.datasource.bar.driver     =  org.postgresql.Driver
spring.datasource.bar.maxconn    =  5
spring.datasource.bar.expiry     =  180
spring.datasource.bar.cache      =  true
spring.datasource.bar.retry      =  3
spring.datasource.bar.retrydelay =  30

关于我如何做到这一点有什么想法吗?正如您所知,我对这种多数据库配置还不是非常精通。

DataSourceBuilder.create().build()
将实例化
HikariDataSource
,因为它是SpringBoot 2.0的默认数据源。如果查看HikariDataSource源代码,属性是jdbcUrl用户名而不是url用户。因此,您需要更改application.properties文件中的属性键,如下所示:

spring.datasource.foo.jdbcUrl=jdbc:postgresql://localhost:5432/fooDB
spring.datasource.foo.username=admin
...
...
spring.datasource.bar.jdbcUrl=jdbc:postgresql://not_localhost:5432/fooDB
spring.datasource.bar.username=definitely_not_admin
...
...

为了根据一些请求参数使用不同的数据源,您可能必须使用Spring的AbstractRoutingDataSource,如本文所述。

该错误是在每次尝试时出现的还是在第一次连接成功后出现的?每次,我尝试构建项目的次数都不到10次。。。但是每一次..注释掉一个bean,看看你是否得到相同的错误。有两个,例外情况是不会告诉你是哪一个导致了已经发生的问题,同样的错误。我确信这与“需要dataSource或dataSourceClassName或jdbcUrl”有关,但我不确定如何添加到中。您是否已尝试按照指出的方式进行配置?
spring.datasource.foo.jdbcUrl=jdbc:postgresql://localhost:5432/fooDB
spring.datasource.foo.username=admin
...
...
spring.datasource.bar.jdbcUrl=jdbc:postgresql://not_localhost:5432/fooDB
spring.datasource.bar.username=definitely_not_admin
...
...