我正在尝试使用Redisson在一个Spring引导项目中实现Hibernate二级缓存。
我一直关注这个博客作为参考
https://pavankjadda.medium.com/implement-hibernate-2nd-level-cache-with-redis-spring-boot-and-spring-data-jpa-7cdbf5632883
另外,我正在尝试以编程方式而不是通过声明方式/通过配置文件来初始化RedissionClient
创建了一个要初始化的Spring Bean,它应该创建RedissonClient示例。
@Configuration
@Lazy(value = false)
public class RedissonConfig {
@Bean
public RedissonClient redissionClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}
然而,这个Bean从未被初始化,在应用程序启动时我得到了以下错误。
Caused by: org.hibernate.cache.CacheException: Unable to locate Redisson configuration
at org.redisson.hibernate.RedissonRegionFactory.createRedissonClient(RedissonRegionFactory.java:107) ~[redisson-hibernate-53-3.12.1.jar:3.12.1]
at org.redisson.hibernate.RedissonRegionFactory.prepareForUse(RedissonRegionFactory.java:83) ~[redisson-hibernate-53-3.12.1.jar:3.12.1]
似乎Spring Boot Hibernate仍在尝试通过配置文件加载Redisson配置。
是否有可能以编程方式在Spring Boot中加载Redission配置?
诚挚的问候,
萨乌拉夫
2条答案
按热度按时间szqfcxe21#
这是可能的,但是您需要向Hibernate提供
RegionFactory
的定制实现,它可以扩展RedissonRegionFactory
,但使用您自己的客户端示例。ma8fv8wu2#
我就是这么做的,下面是我是怎么做的:
1.您需要一个定制的RegionFactory,它类似于
JndiRedissonRegionFactory
,但以某种方式注入了它的RedissonClient
。1.将这个类的一个完全配置的示例放入Hibernate属性Map中。Hibernates内部代码很灵活:如果
hibernate.cache.region.factory_class
的值是一个字符串,则将其视为FQDN。如果它是Class<?>的示例,它将被示例化。如果它是一个对象,它将被使用。Spring提供了一种使用Bean定制Hibernate属性的非常简单的方法:
我的RegionFactory非常简单:
我使用redisson-starter获得了
RedissonClient
,因此引用了RedissonAutoConfiguration
,但您可以只手动创建一个示例。