首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Spring和Hibernate在多租户环境中访问数据的策略

使用Spring和Hibernate在多租户环境中访问数据的策略
EN

Stack Overflow用户
提问于 2016-06-28 11:39:47
回答 1查看 615关注 0票数 2

我是在一个多租户环境中工作的,在这个环境中,可以使用webapplication (rest)前端从大约10个不同的数据源(和实体管理器)访问数据。

要使用的实体管理器取决于rest中的URL参数,例如。api/orders/1/1000003.

我需要使用实体管理器"1“来获取数据。目前,在创建hibernate会话和通过hibernate条件创建查询之前,我正在使用存储库层中的方法调用setDistrict(1)。

一切正常,但我担心的是,该方法需要同步,以避免从错误的实体管理器获取数据。当我同步存储库方法时,我担心性能会很糟糕。

实现这种多租户访问的好策略是什么,这样性能是好的,并且在重载下也会返回正确的数据?

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 11:54:04

Hibernate的SessionFactory允许使用租赁行为

  • 模式与单独的模式方法相关。尝试在没有租户标识符的情况下使用此策略打开会话是错误的。此外,必须指定一个org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider。
  • 数据库与单独的数据库方法相关。尝试在没有租户标识符的情况下使用此策略打开会话是错误的。此外,必须指定一个org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider。
  • DISCRIMINATOR与分区(鉴别器)方法相关。尝试在没有租户标识符的情况下使用此策略打开会话是错误的。此策略尚未在Hibernate中实现,分别为4.0和4.1。其支助计划为5.0。

在您的例子中,我认为您需要模式数据库,并且必须实现MultiTenantConnectionProvider (来源)。

代码语言:javascript
运行
复制
/**
 * Simplisitc implementation for illustration purposes supporting 2 hard coded providers (pools) and leveraging
 * the support class {@link org.hibernate.service.jdbc.connections.spi.AbstractMultiTenantConnectionProvider}
 */
public class MultiTenantConnectionProviderImpl extends AbstractMultiTenantConnectionProvider {
    private final ConnectionProvider acmeProvider = ConnectionProviderUtils.buildConnectionProvider( "acme" );
    private final ConnectionProvider jbossProvider = ConnectionProviderUtils.buildConnectionProvider( "jboss" );

    @Override
    protected ConnectionProvider getAnyConnectionProvider() {
        return acmeProvider;
    }

    @Override
    protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
        if ( "acme".equals( tenantIdentifier ) ) {
            return acmeProvider;
        }
        else if ( "jboss".equals( tenantIdentifier ) ) {
            return jbossProvider;
        }
        throw new HibernateException( "Unknown tenant identifier" );
    }
}

有关详细信息,请参阅链接文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38075217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档