simon03

simon03

暂无个人简介
知识星球
后端开发
2025
齐鲁工业大学

该用户非会员

会员专享项目教程/ 答疑等服务

项目 伙伴匹配项目无法正确引入 spring-boot-starter-data-redis 和 spring-session-data-redis 问题描述:在做伙伴匹配系统 5 时,无法正确引入 spring-boot-starter-data-redis 和 spring-session-data-redis,引入依赖,刷新 maven 启动项目后,项目报错 Error creating bean with name 'redisConnectionFactory' 已经尝试过的方法包括: 1. 在 Application启动类上添加 `@EnableCaching` 注解 2. 更换 spring-boot-starter-data-redis 版本为3.2.1,2.4.0,2.6.4 等(我的 springboot 版本为2.2.5.RELEASE) 3. 添加连接池依赖 commons-pool2 4. 把配置文件中redis配置中的jedis改为lettuce 以上方法均告失效。 pom 依赖配置: ```pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>2.4.0</version> </dependency> <!-- redis --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <!--连接池依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.8.0</version> </dependency> ``` Application. Yml 文件: ```yml session: timeout: 86400 store-type: redis redis: port: 6379 host: localhost database: 0 ``` 完整报错信息: ``` Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-02-28 21:01:30.609 ERROR 32124 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisConnectionFactory' defined in class path resource [org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'redisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/DefaultJedisClientConfig at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at com.yupi.usercenter2.UserCenter2Application.main(UserCenter2Application.java:17) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.2.5.RELEASE.jar:2.2.5.RELEASE] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'redisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/DefaultJedisClientConfig at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.23.jar:5.3.23] ... 24 common frames omitted Caused by: java.lang.NoClassDefFoundError: redis/clients/jedis/DefaultJedisClientConfig at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.<init>(JedisConnectionFactory.java:97) ~[spring-data-redis-2.6.9.jar:2.6.9] at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.<init>(JedisConnectionFactory.java:232) ~[spring-data-redis-2.6.9.jar:2.6.9] at org.springframework.boot.autoconfigure.data.redis.JedisConnectionConfiguration.createJedisConnectionFactory(JedisConnectionConfiguration.java:72) ~[spring-boot-autoconfigure-2.2.5.RELEASE.jar:2.2.5.RELEASE] at org.springframework.boot.autoconfigure.data.redis.JedisConnectionConfiguration.redisConnectionFactory(JedisConnectionConfiguration.java:60) ~[spring-boot-autoconfigure-2.2.5.RELEASE.jar:2.2.5.RELEASE] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.23.jar:5.3.23] ... 25 common frames omitted Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.DefaultJedisClientConfig at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) ~[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:521) ~[na:na] ... 34 common frames omitted ```

bug复盘 写这篇文章的本意,是统计自己一共遇上了几个bug,以及那些印象深刻的bug所耗费的时间。可惜现在我的记忆已经有些模糊了,所以如果要统计的话一定要边做边统计,不能拖到做完了再统计。(或许这意味着我应该养成记日记的习惯,每天抽出固定的一段时间来复盘总结) 在这里,只记录哪些耗费了我一天或超过一天时间,或者让我印象特别深刻的bug 1.ant design pro安装界面和教程里的不符,下载后得到的代码也和视频中的不一样 原因:ant design pro的版本更新了,按照视频里的步骤下载的是4版本。而视频里用到的是3版本。同理umi.js也遇到了类似的问题 2.安装springboot项目,maven栏右侧无依赖 原因:同样是视频落伍了,现在需要先创建一个maven项目,然后把生成好的springboot包拖进来。而视频里的方法是通过SpringInit创建 3.springboot的spring-boot-maven-plugin插件一直报红 原因:最匪夷所思的一个bug,我尝试了各种方法,切换仓库位置,删除版本号,配置版本号为XXX,配置下载地址,乃至删除重下……网上找到的各种方法试了个遍,全都没有用,搞得我差点心态崩溃。最后我在版本号位置输入了一个“2“,然后IDEA直接给我显示了”2.6.4“,我选择了2.6.4,然后就运行了。就,很离谱,似乎这个springboot版本只能支持2.6.4这么一个版本,其他任何1版本3版本哪怕是2.6.X版本它都不支持,就支持2.6.4,哪怕我仓库里下了一堆各种版本的spring-boot-maven-plugin插件,它就显示这一个版本。 4.userMapper.selectOne(queryWrapper);语句未执行 原因:印象最深刻的一个bug,卡的时间也最长,甚至逼的我发星球求助。最后的解决也颇具戏剧性,总之这个bug是由两个bug复合形成的,一是我的数据库表没设置主键和自动增长,二是我做测试时是在UserServiceTest类里做的测试,没有用HTTP Cilent做测试,传入的request参数是自己手动创建的request对象,导致代码155行的request.getSession().setAttribute(USER_LOGIN_STATE,safetyUser);报了个空指针异常 5.部署上线环节,前端登录页面可以正常访问到,但是进行登录或注册时,后端总是返回404 原因:后端转发配置文件里,本该是proxy_pass http://127.0.0.1:8080 的地方我写成了proxy_pass http://127.0.0.1:8080/ ,没错,只是多写了一个/,但前者会代理到http://127.0.0.1:8080/api/test.html,而后者只能代理到http://127.0.0.1:8080/test.html,少了一个/api却是致命的差距,因为我所有的后端端口都有/api,因此所有端口都没法访问到。 改进 跟着教程做项目,软件的版本一定要选择完全一致的 在星球做项目时,可以提前看一下星球里学员的笔记和踩坑记录,这能帮自己节省很多时间(但也不太利于培养自己的问题解决能力) 单元测试很重要!每完成一个功能,都要记得及时测试,验证是否能成功运行。一旦拖到后期,再出现问题排查起来会非常困难。 稳住心态,稳住心态,稳住心态,重要的事情说三遍,写程序的过程中永远会遇到各种超乎想象的问题。一个你以为很简单的功能,实现起来可能会耗费远超你想象的时间。一个堪称愚蠢的错误,却能卡住你数天的进度。编码前认真确认需求,每编写一个代码块都及时测试,遇到bug一步步去排查问题并及时记录错误原因。如果实在是被bug折磨到心态崩溃,那就不要继续工作,去洗个澡,睡一觉,出门散散步,放空一下心情,第二天换个思路去查bug,或者组织好语言去问一下大佬让他帮忙看一下程序。要记住大部分事情其实并没有你想象的那么严重,解决它也不会那么复杂。 ”如果你能正确的描述你遇到的问题,那实际上你就已经把这个问题解决了一半“,这句话实际上非常有道理,初学者在涉及一个自己不熟悉的领域时,最大的困扰在于无法用专业的术语问出自己的面临的问题。没有正确的问题,自然就很难得到有用的回答。现在我们有互联网,有chatgpt,只要你正确的提出了问题,99%的问题都能被解答。那么怎么才能正确的提出问题呢?靠”追问“和”迭代“,输入问题,得到的回答看不懂,就把看不懂的地方当成问题继续搜索,直到和自己的固有知识相重合为止。而”迭代“指的是发现自己对问题的描述不准确,得到的回答不是自己想要的后,就尝试用查到的专业术语替换问题中不专业的术语,或者通过排除错误的可能性来逐步缩小问题的范围,或者干脆换个思路重新提问。毕竟互联网上内容虽多,但一个关键词下的内容却有大量都是重复的,一般只会有3到4种不同的解决方案,如果把这3到4种方法都试过了却仍然没解决问题,那这恐怕是个棘手的问题,需要修改措辞重新进行搜索。 在这里可以举个真实例子,我在做用户中心项目时出了一个bug,部署上线环节,前端登录页面可以正常访问到,但是进行登录或注册时,总是返回404。碰上这种情况,我第一时间想到的是后端出了问题,毕竟前端页面能拿到而后端请求却没有响应。因此我搜索时输入的关键词是”后端404“或”nginx后端请求404“,但是事实真的是这样吗?我在搜索无果后,决定做个实验来确认是不是后端的问题,于是我在本地打包启动了后端,然后再启动前端,发现仍然有问题,排查后发现是数据库配置文件出了问题,我没把application-prod文件里的数据库配置成线上数据库。于是我修改了配置,重新打包上传,然而这次还是出错!又经过了一番排查后,我确定这是nginx服务器的问题,准确的说,是nginx服务器没正确转发我的请求,于是我将问题锁定在”nginx后端配置“上并进行搜索,结果找到的第一篇文章就解答了我的问题——原来是请求路径上多了一个斜杠…… 所以要知道,那些困扰你许久的问题往往都很”简单“,甚至简单到了愚蠢的地步,而你之所以找不到答案,是因为答案藏在你视野的盲区,藏在”黑箱“里。那些你只知道怎么做,却不知道为什么能这么做的地方。遇到问题试了各种方法都不管用,可能只是因为你只是在自己”知道“的范围内找答案,就如同我对后端有一定了解,却对nginx服务器完全一无所知,因此本能的在自己觉得安全的后端范围内找答案,不敢把问题归于自己不了解的服务器,因为那意味着自己要去学新的知识,进入未知的领域。然而当山穷水尽时,就是需要你跳出固有思维,逼自己去了解和学习一些新东西。跨出第一步后,你会发现其实没有你想象的那么难。 收获 在解决bug这方面,除了熟悉了一些网站和debug工具外,最大的收获是积累了一套用记笔记的方式记录,总结,复盘bug的工作流。我将其称作WDR模型,它主要包含三个部分—— W:what,这个问题是什么?或者说,发生了什么让你感觉遇到了问题?在W下只尽可能详细的记录自己遇到的异常现象,不要加入自己的主观判断。 D:do,你都做了什么?为解决问题你都采取了哪些行动,每次行动后问题是被解决了,没解决还是更糟糕了? R:result,结果是什么?bug是被修复了,还是暂时搁置,或是因无法解决而阉割了一部分功能?你是如何解决这个问题的?如何避免类似问题再次发生? 如果心有余力的话,可以把WDR模型升级成WDRT模型,T就是time,记录自己在每个问题上耗费的时间,结合四象限做事法进一步解决关键问题,提高工作效率。

用户中心复盘与总结 我是在12月23日加入星球的,在当时,我就已经产生了在寒假做一个真实项目的想法,12月30日我从学校回家,先用了3天的时间回顾了一下java知识,然后在1月3号正式跟着视频开始做项目。 在项目开始前,我并没有觉得这个项目会很难,当时我觉得最多只要20天应该就可以完成,甚至想着做完这个项目后再赶在寒假结束之前做一个复杂些的项目,我有这样的想法是因为我上学期的数据库原理课程设计做过一个功能类似的图书管理系统,那个项目的功能比这个用户中心还要多,但是用的技术非常老旧(Servlet jsp beanutils),而且只能运行在本地,我想通过这个用户中心项目来学习一下前沿的技术,以及了解一下企业中的开发流程,并且真实的把一个项目部署上线。 我是双非一本大数据技术专业的大三学生,在做这个项目之前,我已经在学校学过了数据库系统概论,java面向对象程序设计,web技术应用基础,javaEE程序设计与应用开发,计算机网络等课程。因此我以为自己应该不会在基础知识这出问题,但事实却恰好相反,因为课程之间间隔时间太长,没有用边学边练的方式学习,学完后没有定期复习巩固等原因,哪怕是已经学过的内容都忘的差不多了,没有织成网络的知识哪怕回忆起来也都是千疮百孔。更不用说关于Spring,Springboot,Mybatis-plus,React等等在学校里根本没听说过的各种框架。看视频的时候感觉非常吃力,时不时就需要去网上补全知识。我花费最多的三个部分——上,下和终。我分别用来了解了一下后端知识,前端知识和一些java基础知识。 从1月3日项目正式启动,到2月3日成功部署上线,用户中心项目总共耗时31天,这个数字比我开始项目时预期的20天超时了50%,之所以超时了这么多,一方面是因为我缺乏项目管理经验,一方面也是因为做这个项目遇到的各种困难远超我之前的想象。然而,这个项目带给我的收获也同样超乎我的想象。 ## 时间管理 本次项目开始之前,我就已经决定要在笔记软件上每天记录自己遇到的bug,学习的感悟,项目的用时等等。而现在项目结束,我也深感到记笔记的重要性,实际上记笔记最重要的优点不是帮助自己记忆东西,而是在整理笔记的过程理顺自己的思路,发现潜在的范式。 此外,我还纠正了自己过去的一个误区,过去我非常不喜欢给某件事订时限,因为我发现自己几乎总是没法在截止日期之前完成任务,而且给自己订下时间限制会让自己非常紧张和焦虑。但是现在我逐渐发现我误解了“设订时限”的意义——通过设定时限,检查是顺利完成,提前完成还是超时完成一件事,然后重新调整时限的过程,我们可以不断矫正自己的“认知偏差”,对自己的能力边界,一件事的难易程度有更清晰,更深入的认识。同时也更方便发现自己的问题,并制定计划来改正自己的问题。 就比如,现在我就能根据笔记,准确列出我在每个视频所耗费的时间—— 1. 用户中心-上:7天 2. 用户中心-中:1天 3. 用户中心-下:8天 4. 用户中心-终:11天 5. 用户中心-末:1天 6. 用户中心-部署:3天 可以发现,我在每个视频上花费的时间是极度不均的,这也是我得到的一大认知:一个项目里花费的80%的时间,都在完成那20%的“关键任务”,在基础知识完备的情况下,只需要1天就可以完成一个视频,6天就可以做完这个项目(这还要算上看视频的时间,如果是不看视频自己的做的话,甚至能更快)。然而,因为缺乏经验以及基础知识的不完备,绝大部分的时间都会卡在那一两个极度难缠的bug上,或者发现自己已经跟不上视频的节奏从而回去恶补知识(基础知识真的很重要!) ## 项目收获 1. 跟着鱼皮真实的了解了一遍企业做项目的流程——确认需求,技术选型,编码,测试,上线的整个流程 2. 接触了企业中真实使用的前后端技术,如Spring,Springboot,Mybatis-plus,React等等。可以以此为跳板去继续深入学习这些技术。 3. 在30天的时间里完全依靠自己去独立解决问题,修复bug,最终完成了一个作品。锻炼了自己的抗压能力,提高了解决问题的能力 4. 在探索自我学习的道路上,积累了不少经验和方法,对学习有了更深一步的认知 ## 失误和改进 1. 缺少系统的知识积累,尽管中途花了很多时间来补全基础知识,但仍然因为缺少知识在各种愚蠢的地方浪费了大量时间。下一阶段的核心目标是补全知识。 2. 因为是跟着视频做的项目,严格意义上不能算是完全独立自主的做出了一个项目,如果有时间的话,可以不看视频重新做一遍项目,或者做一个自己提出想法,自己实现的真正的独立项目(这也是我一直为之努力的梦想,但我知道自己的能力还暂时无法支撑自己的目标) 3. 做项目期间因为一直跟着视频紧赶慢赶,对使用的技术很多都是只知道怎么用,没深入的了解和吃透,因此我也不敢声称自己”熟练的使用了Springboot“等等。且项目期间留下了不少黑箱部分没能完全研究透彻,比如后端的全局异常处理,前端的全局响应拦截器,还有一些ts语法,都处于似懂非懂的状态,这些遗留的点都需要花时间去解决 4. 在做项目期间,我每天都工作学习接近11个小时,但我观察到有时我仍然会去刷手机,看一些没营养的视频,虽然时间已经非常少了,但我还是想把这部分时间优化掉,用一些更健康的方式舒缓心情,此外我还希望能在每天的时间安排里引入锻炼身体的环节,这都需要我重新制定自己的每日计划,不仅要进行学习和工作,也要引入固定的写作、阅读和锻炼环节。我相信这能减少我身体和心理上的发病概率。 5.用户中心项目是个很简单的项目,想拿来装点简历恐怕还不够,我的计划是在今天大三暑假找一个实习,秋招时准备找工作,如果有机会的话还想冲击一下大厂。我大一大二的学习成绩都一般,也没参与过什么竞赛,项目是我唯一能拿的出手的东西,因此我还需要再做一到两个更复杂的项目才方便投简历。现在是2月8日,离春招已经不远了,我现在的一个困扰是,是该补全知识,消化项目经验,加深已有知识的理解,还是要争分夺秒再去做更多新项目,刷面试题,为实习做准备。对寒假剩下的20天左右的时间安排我还是有些犹豫,希望路过的大佬能帮忙解答一二。 自我介绍 项目

求助:UserMapper.selectOne()返回为空且无sql日志产生 问题描述:UserServiceImpl类中,userLogin方法,UserMapper.selectOne()返回为空,使用Mybatis Log插件发现该语句执行时未产生sql日志。然而userRegister方法中的this.count和this.save方法都能正常使用和产生sql日志。且,我还尝试了userMapper.selectById()方法,userMapper.delete()方法this.getOne方法等等,全都是无返回值 无sql日志产生。 PS:可以排除不是加密问题也不是isDelete问题。debug调试确认数据正常进入方法中,就是卡在查询那一步上。 代码和图片可见文档

下载 APP