SpringBoot-Starter2.7.3自动装配Redisson升级版本运行时的问题

序言

在github上搜索redisson官方源码中的issue其他伙伴们提交的记录。

https://github.com/spring-projects/spring-data-redis/tree/main/src/main/java/org/springframework/data/redis/connection/zset

基础工程的pom文件中的依赖结构

springboot version

<dependency><groupld>org.springframework.boot</groupld><artifactld>spring-boot-starter</artifactld><version>2.7.13</version><scope>compile</scope>
</dependency>

redis version 继承了 springboot version

<dependency><groupld>org.springframework.boot</groupld><artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>

mvn clean -->  mvn verify/package/install  对maven工程进行打包操作

spring.profile.active=环境名 (dev、test、druid等) 指定特定环境的application.yml配置文件启动升级版本后的错误在上面的issue中描述的现象。

在导入redisson-spring-boot-starter3.22.0版本项目启动过程中throws this exception

│ 2023-08-09 15:32:04.819 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed                                                                                                                                    │
│                                                                                                                                                                                                                                                            │
│ org.springframework.context.ApplicationContextException: Failed to start bean 'redisPubsubContainer'; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple                                             │
│     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                       │
│     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                     │
│     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.28.jar:5.3.28]                                                                                          │
│     at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]                                                                                                                                                                                     │
│     at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                    │
│     at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                     │
│     at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) ~[spring-context-5.3.28.jar:5.3.28]                                                                                               │
│     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                     │
│     at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.13.jar:2.7.13]                                                                               │
│     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.13.jar:2.7.13]                                                                                                                                     │
│     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.13.jar:2.7.13]                                                                                                                              │
│     at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.13.jar:2.7.13]                                                                                                                                         │
│     at io.tolgee.Application$Companion.main(Application.kt:52) ~[app/:na]                                                                                                                                                                                  │
│     at io.tolgee.Application.main(Application.kt) ~[app/:na]                                                                                                                                                                                               │
│ Caused by: java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple                                                                                                                                                            │
│     at org.redisson.spring.data.connection.RedissonConnection.<clinit>(RedissonConnection.java:2361) ~[redisson-spring-data-31-3.23.2.jar:3.23.2]                                                                                                          │
│     at org.redisson.spring.data.connection.RedissonConnectionFactory.getConnection(RedissonConnectionFactory.java:113) ~[redisson-spring-data-31-3.23.2.jar:3.23.2]                                                                                        │
│     at org.springframework.data.redis.listener.RedisMessageListenerContainer$Subscriber.initialize(RedisMessageListenerContainer.java:1186) ~[spring-data-redis-2.7.13.jar:2.7.13]                                                                         │
│     at org.springframework.data.redis.listener.RedisMessageListenerContainer.doSubscribe(RedisMessageListenerContainer.java:318) ~[spring-data-redis-2.7.13.jar:2.7.13]                                                                                    │
│     at org.springframework.data.redis.listener.RedisMessageListenerContainer.lazyListen(RedisMessageListenerContainer.java:295) ~[spring-data-redis-2.7.13.jar:2.7.13]                                                                                     │
│     at org.springframework.data.redis.listener.RedisMessageListenerContainer.lazyListen(RedisMessageListenerContainer.java:265) ~[spring-data-redis-2.7.13.jar:2.7.13]                                                                                     │
│     at org.springframework.data.redis.listener.RedisMessageListenerContainer.start(RedisMessageListenerContainer.java:249) ~[spring-data-redis-2.7.13.jar:2.7.13]                                                                                          │
│     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.28.jar:5.3.28]                                                                                                       │
│     ... 13 common frames omitted                                                                                                                                                                                                                           │
│ Caused by: java.lang.ClassNotFoundException: org.springframework.data.redis.connection.zset.Tuple                                                                                                                                                          │
│     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) ~[na:na]                                                                                                                                                    │
│     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]                                                                                                                                                 │
│     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]                                                                                                                                                                            │
│     ... 21 common frames omitted

分析过程

1、redisson-spring-boot-starter1.18.0升级方案

SpringBoot Version

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><type>pom</type><scope>import</scope>
</dependency>

redis-boot-starter version

<dependency><groupld>org.springframework.boot</groupld><artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>

redisson-spring-boot-starter version

<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.18.0</version>
</dependency>

这种 redisson-spring-boot-starter3.18.0发布到服务器上部署时进行漏洞扫描组件时发现因为版本号低了无法通过漏洞扫描检测,要求至少要达到redisson-spring-boot-starter3.22.0版本号。

springboot2.x在装配redisson兼容的最高版本3.18.0。在3.18.0以后版本编译过程就会出错。

2、redisson3.22.0

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.22.0</version>
</dependency>

导入redisson、redis-spring-boot-starter、spring-boot-starter依赖编译打包后运行maven主启动类后报错:

Caused by: org.springframcwork.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.redisson.api.RedissonClient" available: eq
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNMatchingBean

解决方案

3、在redisson-spring-boot-starter3.22.0依赖中redisson-spring-data 是 redisson-spring-data-31子依赖不能兼容spring-boot-starter-parent2.7.3版本,需要排除 redisson-spring-data-31,引入 redisson-spring-data-27依赖。

pom文件中升级依赖的版本

<dependency><groupld>org.redisson</groupld><artifactld>redisson-spring-boot-starter</artifactid><version>3.22.0</version>
<exclusions><exclusion><groupld>org.redisson</groupld><artifactld>redisson-spring-data-31</artifactid></exclusion>
</exclusions>
</dependency>
<dependency><groupld>org.redisson</groupld><artifactld>redisson-spring-data-27</artifactld><version>3.22.0</version>
</dependency>

第三种方式符合代码在服务器上部署时漏洞扫描组件要求依赖版本号至少要达到预期的版本。

小结

通过redisson-spring-boot升级3.22.0版本组件扫描是一种漏洞扫描。漏洞扫描是一种自动化的安全测试方法,用于检测计算机系统、网络和应用程序中的漏洞和安全缺陷。漏洞扫描工具会对系统进行自动化的测试,以发现可能存在的安全漏洞和缺陷,如密码弱、SQL注入、跨站脚本攻击等。漏洞扫描工具会模拟攻击者的攻击行为,对系统中的漏洞进行探测和测试,以帮助管理员或开发人员识别和修复系统中的漏洞。

代码漏洞扫描过程中发现redisson-spring-boot-starter低版本漏洞。

漏洞扫描的目的:

发现安全漏洞和缺陷

漏洞扫描可以帮助企业或组织发现其系统、网络或应用程序中可能存在的安全漏洞和缺陷,如密码弱、SQL注入、跨站脚本攻击等。

评估安全风险

漏洞扫描可以帮助企业或组织评估其系统、网络或应用程序的安全风险,以便采取相应的安全措施和调整安全策略。

提高安全性和可靠性

及时修复漏洞和缺陷可以提高系统的安全性和可靠性,防止安全事故和数据泄露等不良后果。

遵守法规和标准

许多法规和标准要求企业或组织对其系统、网络或应用程序进行安全测试和评估,漏洞扫描可以帮助企业或组织遵守相关法规和标准的要求。

参考附录

[1] https://blog.csdn.net/weixin_42555971/article/details/136732270 [N]

[2] https://www.ithere.net/article/1663178340985024513 [N]

[3] https://github.com/redisson/redisson [S]

[4] https://cloud.tencent.com/developer/techpedia/1773 [N]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“跨链桥“的危害

跨链桥&#xff08;Cross-Chain Bridges&#xff09;是连接不同区块链网络的工具&#xff0c;允许用户在不同的区块链之间转移资产和数据。尽管跨链桥为区块链生态系统带来了许多便利&#xff0c;但它们也存在一些潜在的危害和风险。以下是一些主要的危害&#xff1a; 1. 安全…

【Webpack】实现持久化缓存

回答重点 在 Webpack 中实现持久化缓存有几个关键策略&#xff0c;最核心的就是利用文件内容哈希&#xff0c;使得文件名发生变化&#xff0c;这样浏览器就会识别为新的资源而不是使用缓存的旧资源。具体步骤如下&#xff1a; 1&#xff09;使用 output.filename 和 output.c…

Java 编码系列:线程基础与最佳实践

引言 在多任务处理和并发编程中&#xff0c;线程是不可或缺的一部分。Java 提供了丰富的线程管理和并发控制机制&#xff0c;使得开发者可以轻松地实现多线程应用。本文将深入探讨 Java 线程的基础知识&#xff0c;包括 Thread 类、Runnable 接口、Callable 接口以及线程的生命…

Vue引入js脚本问题记录(附解决办法)

目录 一、需求 二、import引入问题记录 三、解决方式 一、需求 我想在我的Vue项目中引入jquery.js和bootstrap.js这种脚本文件&#xff0c;但发现不能单纯的import引入&#xff0c;问题如下。 二、import引入问题记录 我直接这么引入&#xff0c;发现控制台报错TypeError: …

华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?

场景介绍 本章节将向您介绍如何在地图的指定位置添加点注释以标识位置、商家、建筑等&#xff0c;并可以通过信息窗口展示详细信息。 点注释支持功能&#xff1a; 支持设置图标、文字、碰撞规则等。支持添加点击事件。 PointAnnotation有默认风格&#xff0c;同时也支持自定…

vue通过ref实现组件之间传值

文章目录 概述父组件向子组件传值示例 子组件通知父组件示例 概述 在Vue 2中&#xff0c;可以使用ref属性在父子组件之间传递值。父组件可以通过ref属性获取子组件的实例&#xff0c;进而访问子组件的方法和数据。 父组件向子组件传值 示例 父组件 (Parent.vue): <temp…

Xk8s证书续期

Master节点 备份文件 cp -r /etc/kubernetes/ /etc/kubernetes-20211021-bak tar -cvzf kubernetes-20211021-bak.tar.gz /etc/kubernetes-20211021-bak/cp -r ~/.kube/ ~/.kube-20211021-bak tar -cvzf kube-20211021-bak.tar.gz ~/.kube-20211021-bakcp -r /var/lib/kube…

嵌入式内存优化可以从哪些方面下手?

在嵌入式开发中&#xff0c;内存管理是一项至关重要的任务&#xff0c;直接影响到系统的稳定性和性能。由于嵌入式设备通常资源有限&#xff0c;尤其是内存资源&#xff0c;因此内存管理与优化显得尤为重要。 1&#xff09;避免内存泄漏&#xff1a;使用智能指针、RAII&#x…

⭐ Unity 对象池的应用 Cube流星落

此次Demo里生成一些 Cube 从天上往下掉&#xff0c;并且当它们掉到特定高度&#xff08;例如 y 轴小于 0&#xff09;时销毁。为了优化性能&#xff0c;避免频繁创建和销毁物体&#xff0c;使用 对象池&#xff08;Object Pooling&#xff09; 技术来复用这些 Cube。 先看一下…

《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch9 策略梯度方法 Box 8.1 马尔可夫决策过程的平稳分布

Box 8.1&#xff1a; 马尔可夫决策过程的平稳分布 整理自 链接 分析平稳分布的关键工具是 P π ∈ R n n P_\pi \in {\mathbb R}^{n\times n} Pπ​∈Rnn&#xff0c;它是给定策略 π π π 下的概率转移矩阵。 如果状态被索引为 s 1 , ⋯ , s n s_1,\cdots, s_n s1​,⋯…

idea2021git从dev分支合并到主分支master

1、新建分支 新建一个名称为dev的分支&#xff0c;切换到该分支下面&#xff0c;输入新内容 提交代码到dev分支的仓库 2、切换分支 切换到主分支&#xff0c;因为刚刚提交的分支在dev环境&#xff0c;所以master是没有 3、合并分支 点击push&#xff0c;将dev里面的代码合并到…

图片尺寸不合适?这3款免费好用的AI绘图神器帮你免费无缝拓展!一键扩展画面之外的内容,真的泰裤啦!

大家好&#xff0c;我是灵魂画师向阳 在处理图片素材时&#xff0c;大家有没有遇到过尺寸不合适但又不能裁切的情况&#xff1f;是不是也想过图像要是能自己“长”出一块就好了&#xff1f;这种要求在以前或许很难实现&#xff0c;但生产式 AI 技术出现后它就不再是问题了&…

基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue

基于GIKT深度知识追踪模型的习题推荐系统 目录结构 Flask-BackEnd flask后端 app 后端主体文件 alg 深度学习模块 data 数据集data_process.py 数据预处理gikt.py GIKT模型pebg.py PEBG模型params.py 一些参数train.py 仅模型训练train_test.py 模型训练和测试-五折交叉验证t…

WebGIS开发四大开源框架对比

本篇文章主要介绍GIS开发四大地图框架的差异和特点。 Cesium: Cesium是目前主流的一款三维地图框架&#xff0c;支持桌面端、web端、移动端等多平台。Mapbox&#xff1a;高清经纬度矢量瓦片&#xff0c;个性化前端表达&#xff0c;前端矢量绘制&#xff0c;支持海量地名地址。…

数据库实验2—1

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…

[论文总结] 深度学习在农业领域应用论文笔记13

文章目录 1. Downscaling crop production data to fine scale estimates with geostatistics and remote sensing: a case study in mapping cotton fibre quality &#xff08;Precision Agriculture &#xff0c;2024&#xff0c; IF5.585&#xff09;背景方法结果结论个人总…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

C语言实现常见的数据结构

栈 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构 #include <stdio.h> #include <stdlib.h>#define MAX 100typedef struct {int data[MAX];int top; } Stack;// 初始化栈 void init(Stack *s) {s->top -1; }// 判断栈是否为空…

kafka 消息位移提交几种方式:消息重复消息、消息丢失的关键

消费位移 Kafka 中的位移&#xff08;offset&#xff09;是用来记录消息在分区中的位置的标志&#xff0c;简单说就是记录消费者的消费进度&#xff0c;每次消息消费后需要更新消费进度&#xff0c;也就是位移提交 由此可见一旦位移提交发生异常&#xff0c;会导致消费进度不正…

VBA技术资料MF204:右键多按钮弹出菜单中使用图标

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…