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

Spring Boot中的多租户

章宏恺
2023-03-14

我在创建可以动态连接到多个数据库的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

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

共有1个答案

孙清野
2023-03-14

DataSourceBuilder。创建()。build()将实例化HikariDataSource,因为它是SpringBoot 2.0的默认数据源。如果查看HikariDataSource源代码,属性是jdbcUrl、username而不是url、user。所以,您需要在应用程序中更改属性键。属性文件如下:

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,如下所述https://spring.io/blog/2007/01/23/dynamic-datasource-routing/.

 类似资料:
  • 保护数据。 清除租户级别的旧数据。 到目前为止,我们的调查结果是,我们可以为每个租户使用单独的Redis实例--这对我们来说不是一个好的解决方案。 我们发现的另一个选项是用“tenant_id:”前缀命名密钥空间。这个选项解决了第一点--数据现在是安全的,但我们还有第二点需要解决。

  • 我有一个由3个节点组成的HDF集群,其中安装了Nifi。我的目标是在Nifi水平上实现多租户(也许不是最好的词)。意思是我想要两件事: null 任何帮助都很感激... 谢谢你的回答

  • 目前为止,我们已经让用户页面在多租户风格下工作。为使它工作,我们看起来并没有做太多的变化。但请记住,我们正在对一个原来不是多租户的系统作修改。 让我们在 Roles 表应用类似的原则。 再一次,一个租户的用户在不能查看或修改其他租户的角色,每个租户的用户是相互独立工作的。 我们先在 RoleRow.cs 添加 TenantId 属性: namespace MultiTenancy.Administ

  • 我正在构建一个应用程序,它应该服务于多个租户,并存储他们非常敏感的数据。每个租户都有多个用户。我的后端堆栈是用spring boot Hibernate5构建的。我希望hibernate处理多租户问题,所以我有两个问题要问专家: 如果我使用的是每租户模式范式,如何在登录时将用户名与租户关联?每个租户都有自己的用户表,那么我如何知道用户名属于哪个租户呢? 在注册时,什么是正确的方法来动态创建新模式?

  • 问题内容: Tl; dr:有没有方法可以覆盖默认行为? 在我的django项目中,我有很多网址,例如 允许使用以下网址 这样,我便可以使用自定义中间件来修改请求,以包括基于使用我的网站的公司的一些特定详细信息 这一切工作正常,除了当Django试图破译与完整路径和… 它似乎作为正则表达式的默认匹配返回。由于该方法具有用于映射到的转义映射 该标签我已经能够覆盖更换正确的公司名称,我想知道是否有类似的

  • > 我是否应该有一个中央authz微服务来管理我的rbac autz?a.如果authz服务失败,那么所有的微服务都会受到影响,并且平台很容易出现或者无法使用。服务将存储跨微服务的所有资源的角色/权限。对于到达api gw的每个请求,post auth将转到authz,并且在调用微服务之前,它可以被拒绝。(好的) 我应该为每个微服务有一个侧车作为我的autz没有单点故障...如果authz为某个服