Spring Boot中编程式初始化RedissonClient实现Hibernate二级缓存遇问题
解决方案:编程式配置RedissonClient供Hibernate二级缓存使用
默认的RedissonRegionFactory会优先从配置文件加载Redisson配置,不会自动识别Spring容器中已创建的RedissonClient Bean。要实现编程式配置,需通过自定义RegionFactory关联Spring容器中的Bean:
1. 自定义Spring友好的RedissonRegionFactory
创建继承自RedissonRegionFactory的类,实现ApplicationContextAware接口,从Spring上下文获取已初始化的RedissonClient:
import org.hibernate.cache.CacheException; import org.hibernate.cfg.Settings; import org.redisson.api.RedissonClient; import org.redisson.hibernate.RedissonRegionFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringRedissonRegionFactory extends RedissonRegionFactory implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override protected RedissonClient createRedissonClient(Settings settings) throws CacheException { return applicationContext.getBean(RedissonClient.class); } @Override public void setApplicationContext(ApplicationContext context) { applicationContext = context; } }
2. 修改Hibernate配置,指定自定义RegionFactory
在application.properties(或application.yml)中配置Hibernate使用自定义的缓存工厂:
# 指定自定义的Redisson缓存工厂 spring.jpa.properties.hibernate.cache.region.factory_class=com.yourpackage.SpringRedissonRegionFactory # 开启二级缓存和查询缓存(按需配置) spring.jpa.properties.hibernate.cache.use_second_level_cache=true spring.jpa.properties.hibernate.cache.use_query_cache=true
3. 修正Redisson配置类的方法名拼写错误
原配置类中方法名存在拼写错误(redissionClient多了一个s),修正后确保Spring能正确识别Bean:
@Configuration @Lazy(false) public class RedissonConfig { @Bean public RedissonClient redissonClient() { Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); return Redisson.create(config); } }
原理说明
自定义的SpringRedissonRegionFactory重写了createRedissonClient方法,跳过了默认的配置文件加载逻辑,直接从Spring容器中获取已通过编程方式初始化的RedissonClient实例,从而实现无需配置文件的Redisson集成。
内容的提问来源于stack exchange,提问作者saurav
相关产品推荐
相关产品推荐

