簡體   English   中英

Spring Boot中的多租戶

[英]Multi tenancy in Spring Boot

我在創建可以根據用戶輸入動態連接到多個數據庫的spring boot應用程序時遇到問題。 基本上,應用程序在不同的數據庫上運行相同的sql查詢。 之后對我的嘗試進行建模,我收到以下錯誤:

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

-

Caused by: java.lang.IllegalArgumentException: 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中的默認DataSource。 如果查看HikariDataSource源代碼,則屬性為jdbcUrl用戶名 NOT urluser 因此,您需要按如下所示更改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
...
...

為了基於某些請求參數使用不同的dataSource,您可能必須使用Spring的AbstractRoutingDataSource ,如此處https://spring.io/blog/2007/01/23/dynamic-datasource-routing/所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM