我试图使用Redisson在Spring引导项目中实现Hibernate二级缓存。
我一直在关注这个博客作为参考
此外,我还试图以编程的方式初始化RedissionClient,而不是通过声明性的/through配置文件进行初始化。
创建要初始化的spring,它应该创建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引导Hibernate似乎仍然试图通过一个配置文件加载Redisson配置。
是否可以通过编程方式在spring引导中加载Redission配置?
诚挚的问候,
索拉夫
发布于 2022-08-15 12:08:39
这是可能的,但是您需要为Hibernate提供RegionFactory的自定义实现,Hibernate可以扩展RedissonRegionFactory,但使用自己的客户端实例。
发布于 2022-09-26 09:01:39
我就是这么做的,下面是怎么做到的:
JndiRedissonRegionFactory类似的自定义RegionFactory,但以某种方式注入它的RedissonClient。这个类的一个完全配置的实例
hibernate.cache.region.factory_class的值是一个字符串,那么它将被视为一个FQDN。如果它是Class的一个实例,它将被实例化。如果它是一个对象,它将被使用。Spring提供了一种使用bean自定义hibernate属性的非常简单的方法:
@AutoConfiguration(after = RedissonAutoConfiguration.class, before = JpaAutoConfiguration.class)
@ConditionalOnProperty("spring.jpa.properties.hibernate.cache.use_second_level_cache")
public class HibernateCacheAutoConfiguration {
@Bean
public HibernatePropertiesCustomizer setRegionFactory(RedissonClient redisson) {
return hibernateProperties -> hibernateProperties.put(AvailableSettings.CACHE_REGION_FACTORY, new SpringBootRedissonRegionFactory(redisson));
}
}我的RegionFactory非常简单:
@AllArgsConstructor
public class SpringBootRedissonRegionFactory extends RedissonRegionFactory {
private RedissonClient redissonClient;
@Override
protected RedissonClient createRedissonClient(Map properties) {
return redissonClient;
}
@Override
protected void releaseFromUse() {
}
}我使用redisson来获得一个RedissonClient,从而获得对RedissonAutoConfiguration的引用,但是您可以手工创建一个实例。
https://stackoverflow.com/questions/73309853
复制相似问题