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

多租户系统的Spring验证查询

龙华翰
2023-03-14

我有一个在MySQL数据库上运行的多租户Spring Boot应用程序,它为单个租户提供了单独的模式。数据源是通过在运行时传递头代码来决定的。如何确保连接不会在这样的系统中掉线?一旦系统的不活动时间超过了设定的时间,“select 1”命令就需要运行,而这并没有向系统指定要连接到哪个数据源,因此系统会抛出sql异常。

以下是我的配置属性:

spring.datasource.url=jdbc:mysql:/xxxxxxx/xxx?useunicode=true&characterencoding=utf8&usessl=false&autorreconnect=true spring.datasource.driver-class-name=com.mysql.jdbc.driver spring.jpa.properties.hibernate.dialtit=org.hibernate.dialt.mysql57innodbdialk spring.jpa.database=mysql

共有1个答案

云远
2023-03-14

我发现,只要有hibernate.multitenancy=database设置,在application.properties文件中指定的datasource验证查询设置就不会有任何效果,因为我们需要拦截GetConnection调用并以编程方式解析“datasource”租户。因此,我使用扩展的CustomMultiTenantConnectionProviderImpl解决了这个问题,它实现了MultiTenantConnectionProvider接口,并覆盖了GetConnectionReleaseConnection方法的定义,以完成需要完成的工作。现在正在正确验证我的连接。

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

  • 在本教程中,我们把 Norhwind 改为多租户应用程序。 这是多租户软件在维基百科中的定义: 多租户技术(multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。—-维基百科 我们在每张表中添加一个 TenantId 字段,包含用户(Users)表,并只让用户对看到/修

  • 由于我们现在有一个行为处理仓储的详细信息,我们只需在行(rows)实现 IMultiTenantRow 接口并添加 TenantId 属性。 从 SupplierRow.cs 开始: namespace MultiTenancy.Northwind.Entities { //... public sealed class SupplierRow : Row, IId

  • 我们现在有点问题:因为用户 tenant2 有 Administration:Security 权限,所以他可以访问用户和角色权限对话框。因此,他可以使用权限 UI 给自己授予 Administration:Tenants 权限。 Serenity 扫描程序集的特性,比如 ReadPermission、WritePermission、PageAuthorize、ServiceAuthorize 等

  • 启动 Sergen ,并使用 Default 连接为 租户(Tenants)表生成代码。 然后,我们在 TenantRow 定义检索脚本,并把 InstanceName 属性设置为 Tenant: namespace MultiTenancy.Administration.Entities { //... [ConnectionKey("Default"), DisplayName

  • 记住,使用 tenant2 可以在一些服务调用中更新自己的 TenantId,我们需要在服务器端对它进行安全检测。 与此类似,即使默认情况下,不能看到其他租户的用户,但实际上可以检索和更新他们。 又到了黑客时间。 打开 Chrome 的控制台,并输入: new MultiTenancy.Administration.UserDialog().loadByIdAndOpenDialog(1) 什么?