我使用Infinispan Spring Boot Starter(infinispan-spring-boot 3-starter-embedded)和Spring Session分发会话。这工作得很好。
我的应用程序也使用Hibernate(不是JPA,而是使用Hibernate的SessionFactory)。为了获得分布式二级缓存,我设置了以下选项:
<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?
1条答案
按热度按时间beq87vna1#
我最终使用了一个自定义区域工厂:
字符串
在
org.springframework.orm.hibernate5.LocalSessionFactoryBean
中设置属性cacheRegionFactory
。这种方法的一个警告是,如果您使用spring-boot-actuator,您可能必须排除
CacheMetricsAutoConfiguration.class
,因为它似乎会拾取一些不生成统计信息的内部Hibernate缓存,从而导致NullPointerException。