我是在一个多租户环境中工作的,在这个环境中,可以使用webapplication (rest)前端从大约10个不同的数据源(和实体管理器)访问数据。
要使用的实体管理器取决于rest中的URL参数,例如。api/orders/1/1000003.
我需要使用实体管理器"1“来获取数据。目前,在创建hibernate会话和通过hibernate条件创建查询之前,我正在使用存储库层中的方法调用setDistrict(1)。
一切正常,但我担心的是,该方法需要同步,以避免从错误的实体管理器获取数据。当我同步存储库方法时,我担心性能会很糟糕。
实现这种多租户访问的好策略是什么,这样性能是好的,并且在重载下也会返回正确的数据?
谢谢你的建议。
发布于 2016-06-28 11:54:04
Hibernate的SessionFactory允许使用租赁行为
在您的例子中,我认为您需要模式或数据库,并且必须实现MultiTenantConnectionProvider (来源)。
/**
* 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" );
}
}
有关详细信息,请参阅链接文档。
https://stackoverflow.com/questions/38075217
复制相似问题