SpringBoot整合Redis要注意的那些

前言

昨天自己在重新学习SpringBoot整合Redis时,遇到了一个问题java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig,错误很明显找不到需要的类。下面主要记录一下错误是怎么出线的,并且如何解决。

错误回顾

在SpringBoot 2.0+后,默认的redis client是lettuce而不是一直使用的jedis。此次出现的错误也是因为使用了lettuce出现的。
使用时的配置如下所示:

spring:redis:host: localhostport: 6379password:# 连接超时时间timeout: 10s# springboot默认使用lettucelettuce:pool:# 连接池中的最小空闲连接min-idle: 0# 连接池中的最大空闲连接max-idle: 8# 连接池的最大数据库连接数max-active: 8# #连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1ms

pom使用最小的依赖进行测试验证。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

测试代码,期望结果是控制台显示 123456,表明redis可以正常使用。

@SpringBootTest
public class RedisServiceTest {@Autowiredprivate RedisTemplate<Object, Object> redisTemplate;@Testpublic void testRedis() {redisTemplate.opsForValue().set("test", "123456");String abec = (String) redisTemplate.opsForValue().get("test");System.out.println(abec);}
}

测试验证结果:
在这里插入图片描述

问题原因

跟踪一下源码发现就能轻松的发现问题:
既然使用的事lettuce client,程序中会通过yml配置匹配到LettuceConnectionConfiguration来创建连接池,所以看此类的源码就能得到答案。

/*** 创建lettuce工厂方法,该方法执行完我们会得到一个RedisConnectionFactory的实现类。 但是目前问题可以清楚的知道,该方法未执行完就出现了报错,所以我们看下面的代码。*/
@Bean
@ConditionalOnMissingBean(RedisConnectionFactory.class)
LettuceConnectionFactory redisConnectionFactory(ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers,ClientResources clientResources) {LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(builderCustomizers, clientResources,getProperties().getLettuce().getPool());return createLettuceConnectionFactory(clientConfig);
}/*** 生成lettuce客户端配置*/
private LettuceClientConfiguration getLettuceClientConfiguration(ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers,ClientResources clientResources, Pool pool) {LettuceClientConfigurationBuilder builder = createBuilder(pool);applyProperties(builder);if (StringUtils.hasText(getProperties().getUrl())) {customizeConfigurationFromUrl(builder);}builder.clientOptions(createClientOptions());builder.clientResources(clientResources);builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));return builder.build();
}/*** lettuce客户端配置构造器*/
private LettuceClientConfigurationBuilder createBuilder(Pool pool) {	// pool就是我们在yml配置文件中的lettuce.pool配置// 不为空执行的下面的方法if (pool == null) {return LettuceClientConfiguration.builder();}return new PoolBuilderFactory().createBuilder(pool);
}

最后执行的方法截图能明显发现错误
在这里插入图片描述

😂最后发现就是很简单的问题,很单纯的没有引入commons-pool2的jar包。问题原因就是自己不按照人要求做事,还逼逼赖赖~~ (无能的人儿啊)

解决方法

📢那就如她所愿,增加上新的pom依赖

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

🤣宾狗-------验证通过
在这里插入图片描述

当然还有一种方法,就是yml配置文件中不要配置lettuce.pool配置项,这样初始化就执行默认的连接池了。🤔但是好像不配置的话又不符合企业级应用要求,所以还是当一个听话的好孩子吧,这样在之后出错的话就会有人站出来为你说一句: “他还是个孩子啊!!~”

🔚

这次记录就到这里啦~ 献给努力的我们。

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

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

相关文章

Java之Socket与HTTP区别

转自&#xff1a; Java之Socket与HTTP区别 - 曹刚 - 博客园我们都知道TCP/IP协议共分四层&#xff1a;①链路层&#xff0c;有时也称作数据链路层或网络接口层&#xff0c;通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆&#xff08;或其他…

人人都能掌握的Java服务端性能优化方案

转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发&#xff0c;我们写出的大部分代码都决定着用户的使用体验。如果我们的代码性能不好&#xff0c;那么用户在访问我们的网站时就要浪费一些时间等待服务器的响应。这就可能导致用户投诉甚至用户的流失。 关于性…

python模板模式_python-模板方法模式

说明&#xff1a; 模板方法模式时行为模式中比较简单的设计模式之一。模板方法关注这样的一类行为&#xff1a;该类行为在执行过程中拥有大致相同的动作次序&#xff0c;只是动作在实现的具体细节上有所差异。例如&#xff1a;泡茶和泡咖啡&#xff0c;泡茶&#xff1a;把水煮沸…

nacos启动失败:org.springframework.boot.web.server.WebServerExceptio

准备环境 系统环境: windows nacos: 2.0.0-BETA 错误信息 org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat 配置文件…

post使用form-data和x-www-form-urlencoded的本质区别

转自&#xff1a; post使用form-data和x-www-form-urlencoded的本质区别_null-CSDN博客一是数据包格式的区别&#xff0c;二是数据包中非ANSCII字符怎么编码&#xff0c;是百分号转码发送还是直接发送一、application/x-www-form-urlencoded1、它是post的默认格式&#xff0c;…

使用Nancy打造TaskManager2.0管理系统

上一篇开源任务管理平台TaskManager介绍发布后&#xff0c;有网友联系我看看能不能做个后台管理界面&#xff0c;方便管理系统中所有的任务。由于时间和技术问题1.0版本的时候&#xff0c;新增了一个3分钟读取配置文件动态修改任务的功能&#xff0c;不过总体来说还是不直观&am…

Java对象的序列化与反序列化

转载自 Java对象的序列化与反序列化 序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介&#xff0c;例如档案或是记亿体缓冲等。在网络传输过程中&#xff0c;可以是字节或是XML等格式。而字节的…

网站能拿到其他网站的cookie_网站能给公司带来哪些好处?

事实上&#xff0c;许多企业仍在努力建立一个网站&#xff0c;因为如果它建立起来&#xff0c;它需要一笔钱和其他费用。但此时客户业务不太好&#xff0c;企业客户需要考虑很多问题&#xff0c;但创建网站的企业已经尝到了甜头。其实有些朋友可能会有一些偏差。例如&#xff0…

笨办法学习@ConditionalOnProperty 烧脑配置记录

前言 今天继续学习springboot时&#xff0c;一不小心就被ConditionalOnProperty注解的配置真假搞得我真的变得真真假假了。。&#xff08;此为真&#xff0c;彼为假&#xff0c;到底你是真还是你是假&#xff0c;晕了晕了。。。&#xff09; 本片主要记录一下注解的真假情况 …

javaI/O流小结

【README】 1.本文总结java IO读取或写入数据的方式和相关类说明&#xff1b; 2.java IO建立在流之上的。输入流读取数据&#xff0c;输出流写入数据&#xff1b; 3.过滤器流-filter stream&#xff0c;可以串连&#xff08;修饰&#xff09;到输入流和输出流上&#xff1b;…

送给微软中文.NET社区的一份礼物,.NET FM

自报家门 大家好&#xff0c;我是.NET FM。做为一档专业而轻松的播客节目&#xff0c;在今后的日子里&#xff0c;我将为你奉上有关.NET和微软公司其他技术的新鲜资讯&#xff08;偷偷讲下&#xff0c;还有各种八卦哦&#xff09;。 Lex Li的回忆 认识吕鹏同学真的是非常偶然…

你真的以为你了解Java的序列化了吗

转载自 你真的以为你了解Java的序列化了吗 上一篇文章《Java对象的序列化与反序列化》中&#xff0c;简单介绍了Java中对象的序列化和反序列化的一些基础知识。看文那篇文章后&#xff0c;有小伙伴留言说&#xff1a;我终于了解了Java的序列化了。我只想说&#xff1a;小伙子&a…

SpringBoot配置mybatis-mysql数据源

前言 学习SpringBoot整合mybatis mysql配置&#xff0c;首先需要了解什么是ORM(对象映射关系)框架&#xff0c;ORM&#xff08;Object Relational Mapping&#xff09;对象关系映射&#xff0c;是 一种为了解决面向对象与关系型数据库不匹配而出现的技术&#xff0c;使开发者…

编程猜单词游戏python_Python实现简单的猜单词小游戏

本文实例为大家分享了Python实现猜单词小游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 思路 1、一个words列表里存放若干的单词&#xff0c;例如&#xff1a;["extends", "private", "static", "public"]2、在words…

java URL和URI

【README】 本文阐述了 URL&#xff0c; URI&#xff0c;以及对应的java类的api&#xff1b; 1.URI&#xff0c;统一资源标识符&#xff0c;标识互联网上的某个网络资源&#xff0c;标识方式如 名称&#xff0c;位置等&#xff1b;就像人的标识一样&#xff0c;可以通过身份证…

HoloLens开发手记-全息Hologram

全息 Hologram HoloLens使我们可以通过周边世界的光线和声音来创建全息场景和物体&#xff0c;使得它们像真实物体那样。全息场景能够响应你的凝视、手势和语音指令&#xff0c;同时还会和你周边世界的表面交互。借助全息场景&#xff0c;你可以在周边世界创建数码物体。 class…

全网把Map中的hash()分析的最透彻的文章,别无二家。

转载自 全网把Map中的hash()分析的最透彻的文章&#xff0c;别无二家。你知道HashMap中hash方法的具体实现吗&#xff1f; 你知道HashTable、ConcurrentHashMap中hash方法的实现以及原因吗&#xff1f; 你知道为什么要这么实现吗&#xff1f; 你知道为什么JDK 7和JDK 8中hash方…

python下面的代码_解析一下下面的python代码?

class Model(dict, metaclassModelMetaclass): # 初始化, 没啥好说的 def __init__(self, **kw): super(Model, self).__init__(**kw) # 如果取不到值, 报错, 这是一个魔术方法, 使用时直接getattr(obj, key) def __getattr__(self, key): try: return self[key] except KeyErr…

SpringBoot多数据源(主从数据源)配置

&#x1f3b6;前言 学习springboot配置多数据源&#xff0c;先回顾一下springboot配置单数据源的方式 SpringBoot配置mybatis-mysql数据源 &#x1f520;主从数据源搭建 项目依赖 本次记录多数据源配置主要是通过druid mybatis plus aop的形式实现的&#xff0c;mybatis …

(转)HttpURLConnection与 HttpClient 区别

转自&#xff1a; HttpURLConnection与 HttpClient 区别/性能测试对比 - 尚码园HttpURLConnection与HttpClient随笔   目前在工做中遇到的须要各类对接接口的工做&#xff0c;须要用到HTTP的知识&#xff0c;工做完成后想要作一些笔记&#xff0c;原本知识打算把本身写的代码…