Spring Boot 如何将Infinispan Sping Boot Starter与Infinispan一起用作Hibernate的二级缓存提供程序?

ojsjcaue  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(128)

我使用Infinispan Spring Boot Starter(infinispan-spring-boot 3-starter-embedded)和Spring Session分发会话。这工作得很好。
我的应用程序也使用Hibernate(不是JPA,而是使用Hibernate的SessionFactory)。为了获得分布式二级缓存,我设置了以下选项:

  1. <property name="hibernate.cache.region.factory_class">infinispan</property>

字符串
这将region factory设置为org.infinispan.hibernate.cache.v60.InfinispanRegionFactory的实现。这将创建一个新的CacheManager -而不是重用我已经拥有的那个。这样做的问题似乎是它们的默认传输冲突,因为我的日志充满了这样的消息:
2023-10-30 13:58:09.311错误21424 [4,Rainbow-12965] o.j.l.Log4J2LogImpl:JGRP 000191:无法从/172.26.127.126接收数据包:51131:java.io.EOFException
2023-10-30 13:58:09.467错误21424 [4,Rainbow-12965] o.j.l.Log4J2LogImpl:JGRP 000191:无法从/172.26.127.126接收数据包:java.lang.IllegalArgumentException:无效的幻数258;需要在范围[0..100]内
此外,据我所知,Infinispan建议只使用一个CacheManager。那么有什么方法可以避免这种情况,如果可能的话,重用现有的CacheManager?

beq87vna

beq87vna1#

我最终使用了一个自定义区域工厂:

  1. @Component("cacheRegionFactory")
  2. public class CacheManagerReusingInfinispanCacheRegionFactory extends InfinispanRegionFactory {
  3. @Resource
  4. private EmbeddedCacheManager cacheManager;
  5. @Override
  6. protected EmbeddedCacheManager createCacheManager(Properties properties, ServiceRegistry serviceRegistry) {
  7. return cacheManager;
  8. }
  9. }

字符串
org.springframework.orm.hibernate5.LocalSessionFactoryBean中设置属性cacheRegionFactory
这种方法的一个警告是,如果您使用spring-boot-actuator,您可能必须排除CacheMetricsAutoConfiguration.class,因为它似乎会拾取一些不生成统计信息的内部Hibernate缓存,从而导致NullPointerException。

展开查看全部

相关问题