【发布时间】:2025-11-26 22:20:02
【问题描述】:
我正在使用一个多租户 Spring Boot Web 应用程序,它从数据库中读取一些数据。
我为每个租户模型构建了架构,实现了 MultiTenantConnectionProvider 和 CurrentTenantIdentifierResolver 以根据租户设置连接。租户使用 ThreadLocal 变量解析,该变量设置在 Filter 中(通过扩展 OncePerRequestFilter 构建)。
但是,我需要解决在过滤器中无法获取租户信息的特定情况。但是,我可以稍后在处理服务中的请求时获取租户信息,但是此时实体管理器已设置(似乎由 OpenSessionInViewFilter 查看 spring 源代码完成)以使用默认模式,并且我的所有查询都失败了,因为默认架构不包含我需要的数据。
我的问题是,在休眠过滤器已经设置会话之后,如何将实体管理器设置为指向服务级别的租户特定架构?我可以做任何过滤器(OpenSessionInViewFilter)正在做的事情,如下所示:
EntityManager entityManager = entityManagerFactory.createEntityManager();
TransactionSynchronizationManager.bindResource(entityManager, new EntityManagerHolder(entityManager));
//unbind once I am done using the repositories
但我在想这是否是正确的方法,或者是否有任何其他更好、更简单、记录在案的方法。
【问题讨论】:
标签: java spring hibernate multi-tenant