首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring项目中的编程RedissonClient

Spring项目中的编程RedissonClient
EN

Stack Overflow用户
提问于 2022-08-10 16:37:04
回答 2查看 305关注 0票数 1

我试图使用Redisson在Spring引导项目中实现Hibernate二级缓存。

我一直在关注这个博客作为参考

https://pavankjadda.medium.com/implement-hibernate-2nd-level-cache-with-redis-spring-boot-and-spring-data-jpa-7cdbf5632883

此外,我还试图以编程的方式初始化RedissionClient,而不是通过声明性的/through配置文件进行初始化。

创建要初始化的spring,它应该创建RedissonClient实例。

代码语言:javascript
复制
    @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从来没有不正确,我在应用程序启动时得到了下面的错误。

代码语言:javascript
复制
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配置?

诚挚的问候,

索拉夫

EN

回答 2

Stack Overflow用户

发布于 2022-08-15 12:08:39

这是可能的,但是您需要为Hibernate提供RegionFactory的自定义实现,Hibernate可以扩展RedissonRegionFactory,但使用自己的客户端实例。

票数 0
EN

Stack Overflow用户

发布于 2022-09-26 09:01:39

我就是这么做的,下面是怎么做到的:

  1. 您需要一个与JndiRedissonRegionFactory类似的自定义RegionFactory,但以某种方式注入它的RedissonClient

这个类的一个完全配置的实例

  1. 被放入hibernate-
  2. 映射中.Hibernates内部代码是灵活的:如果hibernate.cache.region.factory_class的值是一个字符串,那么它将被视为一个FQDN。如果它是Class的一个实例,它将被实例化。如果它是一个对象,它将被使用。

Spring提供了一种使用bean自定义hibernate属性的非常简单的方法:

代码语言:javascript
复制
@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非常简单:

代码语言:javascript
复制
@AllArgsConstructor
public class SpringBootRedissonRegionFactory extends RedissonRegionFactory {

    private RedissonClient redissonClient;

    @Override
    protected RedissonClient createRedissonClient(Map properties) {
        return redissonClient;
    }

    @Override
    protected void releaseFromUse() {
    }

}

我使用redisson来获得一个RedissonClient,从而获得对RedissonAutoConfiguration的引用,但是您可以手工创建一个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73309853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档