1

使用 AbstractMultiTenantConnectionProvider 会给我带来一些问题。如果我有 1000 个租户并且我想在不重新启动网络服务器的情况下添加更多租户,我如何轻松使用 selectConnectionProvider?

 @Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {

if( "xml1".equals(tenantIdentifier) ) 
    return xml1;

if( "xml2".equals(tenantIdentifier) ) 
    return xml2;

return null;
}

正如您在此示例中看到的,租户是静态链接的。我怎么能解决这个问题。感谢您提供任何提示或解决方案!干杯,吨。

它是来自这里的后续问题实施 AbstractMultiTenantConnectionProvider

4

1 回答 1

2

使其成为一个注册表(如模式中所示),您可以根据需要在其中注册/注销租户(“根据需要”由您的应用程序/环境定义)。从结构上讲,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 崩溃的情况下您可能会错过写一些内容。

于 2012-10-01T19:35:39.683 回答