spring-boot - 为休眠二级缓存 RegionFactory 重用 RedissonClient bean
问题描述
我有一个使用休眠(5.4.15.Final)和spring-session-data-redis的spring boot(2.3.0.RELEASE)应用程序。会话使用redisson持久化到 redis 。Redisson 客户端以编程方式创建并作为 Bean 公开。
有没有办法重新使用上面的bean。
我试过的:
我创建了以下类,它尝试通过扩展 RedissonRegionFactory 来注入RedissonClient
@DependsOn("redis-client")
public class RedissonCachingConfiguration extends RedissonRegionFactory {
private RedissonClient redissonClient;
@Autowired
public RedissonCachingConfiguration(RedissonClient redissonClient) {
this.redissonClient = redissonClient;
}
@Override
protected RedissonClient createRedissonClient(Map properties) {
return redissonClient;
}
}
但是RedissonClient
在构造函数中为 null 并抛出以下堆栈跟踪。
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Could not instantiate named strategy class [com.sso.relay.configuration.RedissonCachingConfiguration]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:247) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:192) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.cache.internal.RegionFactoryInitiator.resolveRegionFactory(RegionFactoryInitiator.java:93) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:47) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:32) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
... 15 common frames omitted
Caused by: org.hibernate.service.spi.ServiceException: Unable to call constructor of RegionFactory impl [com.sso.relay.configuration.RedissonCachingConfiguration]
at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:65) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:23) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:243) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
... 21 common frames omitted
Caused by: java.lang.InstantiationException: com.sso.relay.configuration.RedissonCachingConfiguration
at java.base/java.lang.Class.newInstance(Class.java:571) ~[na:na]
at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:62) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
... 23 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.sso.relay.configuration.RedissonCachingConfiguration.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3349) ~[na:na]
at java.base/java.lang.Class.newInstance(Class.java:556) ~[na:na]
... 24 common frames omitted
它看起来正在尝试调用无参数构造函数,但没有。我尝试使用 setter 注入添加无参数构造函数,但未注入客户端。
解决方案
推荐阅读
- python - ValueError:X 中没有特征满足方差阈值
- sql - 为什么我无法在连接到 C 的 SQLite 中创建两个新用户?它不适用于两个电话
- spring-boot - 使用spring MVC重定向到带有post属性的外部url
- python - 如何从 django 连接 Mongo DB?
- python - Mongodb gitlab CI docker连接被拒绝
- javascript - 表达动态路由来处理 /a/bcd-:e-:f
- python - 使用 Python 抓取数据并接收与 DevTools 不同的 html 树
- javascript - 如何使用 Rapidapi 从 json 获取 html 输出?
- java - Java 删除尾随 0
- mysql - 在 MySQL 中的两列上进行反连接