自定义休眠二级缓存名称查找

时间:2016-12-10 16:30:21

标签: java spring hibernate caching

我正在为实体使用具有二级缓存的spring boot,例如

@Entity
@Table(name = "customer")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Customer implements Serializable {
  ....
}

这是按预期工作的,但现在我必须将应用程序转换为多租户版本。每个租户都有自己的数据库,我们使用ThreadLocal存储当前租户,AbstractRoutingDataSource用于路由到租户的数据库。如果第二级缓存已关闭,则此工作正常。

让二级缓存工作也很好。问题似乎是缓存名称,即实体的FQCN。由于缓存不是租户或数据库感知的,因此每个租户使用相同的缓存。

为此,我们使用ThreadLocal解析当前租户只需

即可访问
TenantContext.getCurrentTenant();

并返回租户名称。

我们使用EhCache,它由spring cache abstraction支持:

@Bean
public CacheManager cacheManager() {
    net.sf.ehcache.CacheManager cacheManager = net.sf.ehcache.CacheManager.create();
    EhCacheCacheManager ehCacheManager = new EhCacheCacheManager();
    ehCacheManager.setCacheManager(cacheManager);
    return ehCacheManager;
}

是否可以拦截缓存名称的生成,以便使用当前租户名称而不是FQCN,并且每个insert / lookup / evict都会解析此租户感知缓存名称?

0 个答案:

没有答案