当前位置: 首页 > 知识库问答 >
问题:

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

朱修真
2023-03-14

我们将Infinispan 10.8.1配置为在我的Spring Boot应用程序中用作Hibernate二级缓存(2LC),它按预期工作。配置在infinispan.xml中完成,传输配置指向一个cluster.xml文件,该文件配置JGroup以使用TCP设置4台机器的集群。

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

指向Hibernate使用的完全相同的配置文件并没有阻止应用程序创建第二个缓存管理器。如何重用现有的缓存管理器?

共有1个答案

潘国源
2023-03-14

可以深入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();

现在您有了一个缓存管理器,您可以调用缓存管理器。createCache来创建自己的缓存,然后调用cache。放入和缓存。获取等。

这做了一些未经检查的铸造,我想说,它很可能会改变,当你升级Hibernate或Ininispan在未来。

另一种方法可能是使用您自己的版本和覆盖方法扩展InfinispanRealonFactory,以便您可以在该点创建自己的缓存。在这种情况下,您需要更改配置hibernate.cache.region.factory_class以指向您的类。

 类似资料:
  • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我

  • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu

  • 尝试使用infinispan作为Hibernate的二级缓存,但总是给我以下错误 org.infinispan.jmx.JMX MBean实例类型=CacheManager, name="DefaultCacheManager"已经在'org.infinispan'JMX域下注册。如果您想允许多个配置了相同JMX域的实例,请在org.infinispan.jmx.JmxUtil.buildJmxD

  • 问题内容: 我正在开发hibernate+ ehcache程序。 ehcache.xml 我在bean.xml中提到了ehcache 我在dao类中的调用方法是 输出为: 但是它在数据库中命中了两次。我在代码中没有发现任何错误。请向我建议为什么它在数据库中命中了两次。 问题答案: 我已经解决了我的问题。我需要添加 在域类中。

  • 本文向大家介绍Hibernate中一级缓存和二级缓存之间的区别,包括了Hibernate中一级缓存和二级缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 Hibernate支持两种类型的缓存,一种是第一级缓存,另一种是第二级缓存。  一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化Db交互。 那不是在事务中完成每次修改之后更新,而是仅在事务结束时更新

  • 1、一级缓存:指的是mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入sqlSession中,再次查询的时候,先去sqlSession中查询,有的话直接拿出,当sqlSession消失时,mybatis的一级缓存也就消失了,当调用sqlSession的修改、添加、删除、commit()、close()等方法时,会清空一级缓存。 2、二级缓存:指的是mybati