集成redisson后redistemplate出现NULL POINT EXCEPTION和stack overflow

项目集成redisson并使用redistemplate操作zset时遇到空指针和栈溢出异常,原因是SpringBoot默认的LettuceConnection与redisson的RedissonConnection冲突。RedissonAutoConfiguration导致RedisTemplate的实现变为Redisson,但某些方法未实现,调用废弃的父类方法产生递归,引发异常。解决方法是确保redisson-spring-data版本与spring-boot-starter-parent一致,避免版本不兼容问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 现象:项目中集成了redisson,然后使用redistemplate进行zset操作时就出现空指针和栈溢出异常;

  • 原因:spring-boot项目中引入spring-boot-starter-data-redis后,默认使用LettuceConnection作为redis连接使用,当引入redisson-spring-boot-starter后,由于RedissonAutoConfiguration中的自动化配置会在RedisAutoConfiguration之前执行,所以默认的RedisTemplate、StringRedisTemplate会在redisson中创建bean,最终的RedisConnection的实现为Redisson。

RedissonAutoConfiguration生效使用RedissonConnection,大部分基础功能有实现,但是对于一些其他功能如redisTemplate.opsForZSet()方法未作实现,继承自AbstractRedisConnection, 所以此时在使用redisTemplate.opsForZSet()时,此方法RedissionConnection中没有实现,最终调用到了父类DefaultedRedisConnection中,而父类实现已废弃, 返回this, 造成递归调用自己,最终栈溢出。

  • 解决方式:redisson-spring-boot-starter所依赖的redisson-spring-data版本需要和spring-boot-starter-parent版本一致即可解决。比如,redission-spring-data-23,那么spring-boot-starter-parent需要用2.3.x版本。

### 解决 Unreal Engine 纯 Blueprint 项目中的 EXCEPTION_STACK_OVERFLOW 错误 当面对 `EXCEPTION_STACK_OVERFLOW` 错误时,通常意味着存在无限递归或其他形式的过度函数调用。对于纯蓝图项目而言,优化转换某些蓝图逻辑到原生 C++ 可能是一个有效的解决方案。 #### 使用 Nativize Blueprint Assets 功能 为了提高性能并减少潜在的堆栈溢出风险,在项目的 Packaging Settings 中可以启用实验性的功能来将蓝图资产本地化: - **编辑器设置**:在项目的 Packaging Settings 中找到 Experimental 部分,并勾选 Nativize Blueprint Assets[^1]。 另一种方法是在构建过程中通过命令行传递 `-NativizeAssets` 参数给 UAT BuildCookRun 脚本以激活此特性。 这一步骤会把指定的蓝图编译成 C++ 源码,并存储于项目的 Intermediate 文件夹下的 NativizedAssets 子目录中。 ```bash UE4Editor-Cmd.exe YourProject.uproject -run=BuildCookRun -platform=Win64 -config=Development -nocompileeditor -pak -stage -archive -archivedirectory="YourArchivePath" -NativizeAssets ``` #### 排除不必要的蓝图进行本地化 并非所有的蓝图都需要或适合被本地化处理;因此可以在 `[BlueprintNativizationSettings]` 下的游戏 DefaultEditor.ini 文件中定义哪些类型的蓝图应该被排除在外,以及具体要忽略掉哪些资源文件。例如: - 排除非必要的 UI 组件(如 Widget Blueprints) - 特定游戏内的蓝图实例也可以被列入黑名单 配置样例如下所示: ```ini [BlueprintNativizationSettings] +ExcludedBlueprintTypes=/Script/UMGEditor.WidgetBlueprint +ExcludedAssets=/Game/Blueprints/MyBlueprint ``` 这样做不仅能够简化最终生成的代码量,还能避免因不必要地增加复杂度而导致新的错误发生。 #### 进一步排查与调试建议 如果上述措施未能解决问题,则需进一步深入分析具体的蓝图实现细节,寻找可能导致循环引用或者其他引起过深调用链的情况。利用虚幻引擎自带的日志记录工具其他诊断手段可以帮助定位问题所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值