重用Hibernate二级缓存来缓存代码中的实例?

时间:2020-07-30 23:36:37

标签: hibernate infinispan second-level-cache

我们已将Infinispan 10.8.1配置为在Spring Boot应用程序中充当Hibernate二级缓存(2LC),并且按预期工作。该配置在infinispan.xml中完成,其传输配置指向一个cluster.xml文件,该文件将JGroups配置为使用TCP设置4个计算机的集群。

我们也想在代码中使用Infinispan来缓存不需要持久化的随机实例。但是,我们没有找到一种方法来重用Hibernate使用的相同缓存和集群,因此该应用程序最终不会创建第二个集群。

指向与Hibernate完全相同的配置文件并不会阻止应用程序创建第二个cacheManager。现有的cacheManager如何可以重用?

1 个答案:

答案 0 :(得分:3)

有可能深入Hibernate(从org.hibernate.SessionFactory开始)并提取底层缓存管理器,如下所示:

    final SessionFactoryImpl factory = (SessionFactoryImpl)sessionFactory;
    final CacheImplementor cache = factory.getCache();
    final InfinispanRegionFactory regionFactory = (InfinispanRegionFactory)cache.getRegionFactory();
    final EmbeddedCacheManager cacheManager = regionFactory.getCacheManager();

现在您有一个cacheManager,可以调用cacheManager.createCache创建自己的缓存,然后调用cache.putcache.get,等等。

这确实进行了一些未经检查的转换,我想说,将来升级Hibernate或Ininispan时,它很有可能会改变。

另一种方法是使用自己的版本扩展InfinispanRegionFactory并覆盖方法,以便您可以在此时创建自己的缓存。在这种情况下,您需要更改配置hibernate.cache.region.factory_class以指向您的班级。

相关问题