database - 使用 Hibernate 和 Spring 根据用户登录连接到租户数据库

标签 database spring hibernate multi-tenant sessionfactory

我一直在阅读 hibernate 中的 Multi-Tenancy 和 stackoverflow 中的几篇文章,但它们似乎没有解决我的要求,所以在这里。我正在研究基于 SAAS 的应用程序模型,其中我有一个应用程序由多个客户提供服务,并且对于每个客户,都会有一个独立的租户数据库实例 (postgresSql)。除此之外,我还有一个主数据库,用于对用户进行身份验证并确定它属于哪个租户数据库,考虑这个主数据库将包含诸如租户数据库的连接 URL 之类的信息。

当用户登录时,我将使用主数据库对其进行身份验证,获取连接 URL 等租户数据库信息,并连接到该数据库,并通过该数据库为所有用户请求提供服务。

考虑到我可以在 hibernate 配置文件中定义多个 sessionfactories,这将使它在应用程序开发期间成为静态的,相反我想通过读取信息为用户所属的各个租户数据库动态创建 sessionfactories来自 master 数据库的连接 URL。

此外,还有一种情况是我必须维护主数据库和租户数据库的 session 工厂,因为我必须在用户期间将用户添加到主数据库和租户数据库中创作。

任何人都可以帮助解决这一要求吗?

最佳答案

我会定义两个 session 工厂,一个用于主数据库,一个用于其他以假值开头的数据库。 this可以帮助您了解如何在运行时更改数据源。

最后,threadlocal 可以帮助您在调用之间存储数据。

希望对您有所帮助。

关于database - 使用 Hibernate 和 Spring 根据用户登录连接到租户数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628079/

相关文章:

java - 如何在同一个数据库表上映射两个 JPA 或 Hibernate 实体

两张表的Mysql排名

java - 如何将 Hibernate 实体拦截器与 JPA 事务管理器一起使用?

sql - 将数据从 Excel 导入到 PostgreSQL

java - Spring单元测试用例不回滚记录插入

javascript - Spring Boot 与 microsoft sql server 的多数据库配置

java - 在 Hibernate 中使用接口(interface)而不是具体类映射 HashMap

java - Mysql驱动本身是否实现了DataSource接口(interface)?

c# - 如何在 .Net 上创建 Access 数据库备份?

java - 应用程序通常如何存储数据(用java)?