【问题标题】: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 崩溃的情况下您可能会错过写一些内容。

    【讨论】:

    • 非常好!谢谢!!干杯,t。
    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2014-05-25
    • 2017-07-11
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多