我们已将 Infinispan 10.8.1 配置为在我的 Spring Boot 应用程序中用作 Hibernate 二级缓存 (2LC),并且它按预期工作。配置在 infinispan.xml 中完成,传输配置指向 cluster.xml 文件,该文件将 JGroups 配置为使用 TCP 设置 4 台计算机的集群。
我们也想在代码中使用 Infinispan,来缓存不需要持久化的随机实例。但是,我们没有找到重用 Hibernate 使用的相同缓存和集群的方法,因此应用程序最终不会创建第二个集群。
指向 Hibernate 使用的完全相同的配置文件并不会阻止应用程序创建第二个缓存管理器。如何重用现有的cacheManager?
最佳答案
可以深入了解 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.put
和cache.get
等
这会进行一些未经检查的转换,我想说,当您将来升级 Hibernate 或 Ininispan 时,它很可能会发生变化。
另一种方法可能是扩展 InfinispanRegionFactory
使用您自己的版本和覆盖方法,以便您可以在此时创建自己的缓存。您将需要更改配置hibernate.cache.region.factory_class
在本例中指向您的类(class)。
关于hibernate - 重用Hibernate二级缓存来缓存代码中的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182871/