【问题标题】:AbstractMultiTenantConnectionProvider, selectConnectionProviderAbstractMultiTenantConnectionProvider,选择ConnectionProvider
【发布时间】:2012-09-22 09:26:30
【问题描述】:
使用 AbstractMultiTenantConnectionProvider 会给我带来一些问题。如果我有 1000 个租户并且我想在不重新启动网络服务器的情况下添加更多租户,我如何轻松使用 selectConnectionProvider?
@Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
if( "xml1".equals(tenantIdentifier) )
return xml1;
if( "xml2".equals(tenantIdentifier) )
return xml2;
return null;
}
正如您在此示例中看到的,租户是静态链接的。我怎么能解决这个问题。感谢您提供任何提示或解决方案!干杯,t。
这是Implement an AbstractMultiTenantConnectionProvider这里的后续问题
【问题讨论】:
标签:
database
hibernate
connection
database-schema
multi-tenant
【解决方案1】:
使其成为一个注册表(如模式中所示),您可以根据需要在其中注册/注销租户(“根据需要”由您的应用/环境定义)。从结构上讲,MultiTenantConnectionProvider 内部是一个 Map。您可以使用以下方法从 Hibernate SessionFactory 访问 MultiTenantConnectionProvider:
MultiTenantConnectionProvider multiTenantConnectionProvider =
( (SessionFactoryImplementor) sessionFactory )
.getServiceRegistry()
.getService( MultiTenantConnectionProvider.class );
YourMultiTenantConnectionProviderImpl yourMultiTenantConnectionProvider = (YourMultiTenantConnectionProviderImpl) multiTenantConnectionProvider;
yourMultiTenantConnectionProvider.registerTenant( ... );
...
yourMultiTenantConnectionProvider.deregisterTenant( ... );
然后您只需要决定如何在启动/停止之间保留租户(写入文件等)。就我个人而言,我会在 registerTenant/deregisterTenant 调用后立即坚持。或者,您可以等到关闭(让 YourMultiTenantConnectionProviderImpl 实现 Stoppable),但在 JVM 崩溃的情况下您可能会错过写一些内容。