![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
叶不修233
这个作者很懒,什么都没留下…
展开
-
Java——redis通过改写部分源码实现动态db-操作数据库的时候可以指定db操作
*** 存放对应库的redisTemplate,用于操作对应的db/*** 当不指定库时默认使用的redisTemplate/*** 当类被加载到容器中属性设置完毕后检查redisTemplates和defaultRedisTemplate是否为空} } /*** 获取要操作的RedisTemplate// 当前要操作的DB Object lookupKey = determineCurrentLookupKey();原创 2023-03-27 18:15:30 · 939 阅读 · 1 评论 -
Java——位运算符
在上面的byte[]数组转String的例子中:假如我们有一个byte数组[35, 36, 37, 38, 39, 40]。如果把value的类型改成long,long类型最多可以存储64位的数字,那么位运算的大小限制就扩大了一倍,也就是,左移8位这个操作可以执行7次,即,length的大小最多为8。进行遍历^ =运算,结果是4,也就是把前面两两相等的数字都清除掉了,留下没有可以配对两两抵消的数字4。,length一旦超过4,就只能取到byte[]数组最后的4位转换之后的结果。原创 2023-02-20 11:05:01 · 525 阅读 · 0 评论 -
Java——进制转换的一些内容
【代码】Java——进制转换的一些内容。原创 2023-02-14 10:42:35 · 310 阅读 · 0 评论 -
记录一些遇见的bug——记录一个使用多线程异步调用openfeign时子线程丢失request请求头导致的空指针异常错误
获取request对象的请求头时报了空指针异常,意思就是主线程中的请求头并没有带过来。在主线程里调用子线程时将request传递过去,并设置子线程的请求头。查看feign配置FeignConfig.java。原创 2023-02-13 09:02:08 · 1036 阅读 · 0 评论 -
Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时
大部分的业务都不是独立运行的,会有参数传递到业务中,如果需要多线程调用的业务有主线程的参数需要传递过去,就可以把参数写在实现了Runnable接口的业务类的私有属性中,用业务类的构造方法传参。在业务里,使用多个线程并行处理业务能够极大的加快处理速度,但是如果我们需要明确掌握每次处理业务的耗时,和所有业务处理完成的总耗时,就可以通过CountDownLatch来帮我们实现。把处理数据的方法写在处理类中重写的Runnable接口的run()方法中。在方法中调用了属性num。添加了以上属性的构造方法。原创 2023-01-03 10:42:24 · 2306 阅读 · 6 评论 -
SpringSecurity——OAuth2框架鉴权实现源码分析
这个过滤器下涉及到的类有以下12个类,大致作用是从请求中提取authentication,从authentication中获取token,判断是否为空,是否有效,是否过期。在springSecurityFilterChain过滤器链中,首先初始化一个FilterChainProxy过滤器链代理对象,在这个过滤器链代理对象中有一个过滤器链集合,每一个过滤器链都有一组过滤器来处理不同的请求。其中的第五条过滤器链springSecurityFilterChain是本文要讨论的对象。原创 2022-12-30 14:35:15 · 1311 阅读 · 1 评论 -
JAVA——把一批压缩文件中存放的部分数据进行处理(替换)
有一批已经压缩存档的数据文件(压缩文件格式为.tar.gz,解压后为.txt文件),现在需要把每个文件中符合需要的字段数据进行更改替换,因为文件量大,需要替换的字段数据有明确共同点(数据在文件每一行中所处同一个位置),因此写个脚本来处理是比较省时的做法。2.读取解压后的文件并且按照一定逻辑处理。原创 2022-12-23 18:13:38 · 1453 阅读 · 2 评论 -
JAVA——通过自定义注解实现每次程序启动时,自动扫描被注解的方法,获取其路径及访问该路径所需的权限并写入数据库
在需要扫描的微服务项目中新建一个自定义注解,因为这里定义的注解用于鉴权,因此给该注解取名叫做MyAccessControlAnnotation//@Retention--用于指定注解保留范围:SOURCE源码 --> CLASS字节码 --> RUNTIME运行 @Retention(RetentionPolicy . RUNTIME) //@Target--用于标记这个注解应该是哪种 Java 成员,METHOD用于放方法头上 @Target({原创 2022-09-20 18:04:02 · 2748 阅读 · 0 评论 -
记录一些遇见的bug——调用增加方法报错line 1:43 no viable alternative at input ‘<EOF>‘ line 1:43 mismatched input ‘<EO
报错截图:错误代码:二、问题原因报错提示SQL语句执行错误。具体是给SQL语句的参数赋值的时候出的问题。检查了下发现,调用新增方法,传入的是对象,但方法接收的时候没有加@RequestBody注解,如图所示:在方法的接收参数处加上@RequestBody注解,表明传递的是对象。原创 2022-09-20 16:35:50 · 1549 阅读 · 0 评论 -
记录一些遇见的bug——项目启动报错Parameter 1 of constructor in com.example.filter.SimpleGlobalFilter required a bea
报错截图:错误代码:二、问题原因上午运行得好好的代码,啥都没改下午程序突然就挂了,死活起不来,就报如图所示错误。让程序猿忍不住怀疑人生,开始相信运行程序之前需要洗手焚香的传说…重点是啥都没改。。然后原因是,本微服务(gateway)中引用了自己写的工具类commons-util工具类,如图所示:而commons-util工具类中引用了redis依赖没有排除,与gateway微服务中引用的redis-reactive依赖造成冲突。有时候A依赖覆盖B依赖,这时候程序可以正常运行。有时候B依赖占原创 2022-09-19 20:08:42 · 4596 阅读 · 0 评论 -
记录一些遇见的bug——项目启动报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.e
报错截图:错误代码:二、问题原因虽然看起来是一个空指针异常,但真正的原因在第二张报错截图上:也就是如下内容:因为数据库表中有个字段名叫desc,如图所示:desc是MySQL语法中的关键字,mybatis plus自动生成的sql中因为这个关键字的影响,就造成了语法错误。方案1:更换字段名为非MySQL关键字即可。例如此处我把字段名改成describer,同时更改Java中的实体类属性名。clean之后再次运行,项目顺利启动不再报错。方案2:不使用mybatis plus ,更换成原创 2022-09-17 11:02:05 · 3803 阅读 · 0 评论 -
Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境
使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境原创 2022-08-31 20:00:51 · 444 阅读 · 0 评论 -
Vue——webpack项目(没有安装vue-cli脚手架时)解决请求项目启动问题、跨域问题和请求转发报404的问题
项目没有使用 vue-cli 或者 @vue/cli ,直接使用 webpack ,这样起作用的配置文件就是 config/index.js ,所以,在项目根目录下扔一个 vue.config.js 扔了也白仍。即,我当前vue项目的端口号是9001,当遇到请求以/api开头时,就把该请求转发到端口号为8080的后端Java项目。使浏览器访问的IP地址和vue项目中配置的IP地址一致,即,同时为localhost或者同时为127.0.0.1。在解决了以上的跨域问题后发现,无论怎么调试,请求永远报404。..原创 2022-08-11 11:16:21 · 1208 阅读 · 0 评论 -
记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.
由于 MapStruct 依赖于 JavaBean 中有 getter/setter 方法,所以,如果使用了 lombok 来生成 getter/setter 方法的话,那么在配置上有一些特殊的地方:需要 lombok 先对 .class 文件"动手脚",然后 MapStruct 再来对 .class 文件"动手脚"。如果你的项目同时使用了Lombok和Mapstruct工具,写了dto转换类,例如下面的BrandConverter转换类。未找到BrandConverter的bean。再次启动,不再报错。.原创 2022-08-10 20:09:42 · 1265 阅读 · 0 评论 -
Linux——在Linux系统上打包和部署springboot+vue项目,nginx+mysql+redis+minio
使用java -jar springboot-affair-0.0.1-SNAPSHOT.jar命令运行Java项目。在浏览器中输入网址http://192.168.78.128:80,按回车,自动重定向到登录页,环境搭建成功!打包的目录下,打包后会出现一个target目录,进入目录可以看到打好的jar包。进入拉取下来的前端代码所在的src目录下,输入npm run build命令。最后,以上项目都完成后,可以通过虚拟机IP+Nginx配置的端口号访问系统。最后可以查看npm版本即为安装成功。.......原创 2022-08-05 16:13:45 · 2647 阅读 · 1 评论 -
记录一些遇见的bug——springBoot+minio文件上传为txt文件时,如果上传时编码格式不是utf-8,就会出现通过文件链接直接在windows窗口预览文件,文件内容乱码问题
springBoot项目上传文件到minio上,获取到文件url,直接在浏览器访问url(即预览文件)时,文件格式为txt时,会出现文件乱码问题。上传txt文件前,创建fileUtil工具类:手动设置txt文件编码格式后再上传。txt文件不是utf-8编码。......原创 2022-08-04 22:40:17 · 3230 阅读 · 0 评论 -
记录一些遇见的bug——关于Lombok的一个大坑,使用@RequestBody接收axios请求对象时,对象所有属性均为null
使用idea工具的Generate一键生成的set和get方法与springboot框架的默认方法一样,首字母没有大写,就可以拿到值了。各种研究各种试,排除了各种错误可能,前台没有多一个或者少一个逗号,后台逻辑也没问题,前台代码后台代码各种方法重写了6遍,还是接收不到。而Lombok利用反射,默认将所有属性的首字母大写来生成set和get方法,写出来的是setNContent()!springboot默认的方法是setnContent(),没有把属性名的首字母大写。拿不到数据问题不大,问题是它也不报错。..原创 2022-07-30 14:49:00 · 517 阅读 · 0 评论 -
记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题
使用mapstruct转换实体类时发现,转换后的po类数据全部为null,查看编译后的class文件发现,应该转换的目标po类对象并没有转换,而是new了一个新对象,没有给它的属性赋值。lombok自动生成的setget方法与idea工具生成的不同,clean之后重新编译,转换后的数据正常,如图所示。手动写下po类的setget方法。所以又是坑爹的lombok。......原创 2022-07-30 14:26:40 · 1377 阅读 · 1 评论 -
记录一些遇见的bug——axios请求报500,后端报错com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serial
再查看dto类,尝试将@Data注解换成手动生成setget方法,数据不再丢失。经过调试发现,请求走到这里还是正常的,获取的list结果有值。总之原因是在于转换时数据丢失导致报错。手动写下dto类的setget方法。所以又是坑爹的lombok。不要用lombok注解。......原创 2022-07-29 19:01:29 · 1253 阅读 · 1 评论 -
JAVA——springSecurity——自定义配置的一些补充:Anonymous匿名用户、重写loadUserByUsername()方法、自定义WebSecurityConfig配置等
publicstaticResponseResultSUCCESS=newResponseResult(200,"成功");publicstaticResponseResultINTEVER_ERROR=newResponseResult(500,"服务器错误");主要有三项1.SpringSecurity自带HttpBasic基础认证模式2.默认formLogin表单模式。原创 2022-07-16 12:27:10 · 908 阅读 · 0 评论 -
JAVA——springSecurity——底层原理分析:处理认证请求和非认证请求的流程,主要过滤器链的作用
在加载时启动一个叫DelegatingFilterProxy的过滤器代理对象,让spring管理这些过滤器的生命周期DelegatingFilterProxy类——doFilter()2.初始化一个FilterChainProxy过滤器链代理对象初始化一个过滤链FilterChainProxy过滤器链的代理对象,在这个过滤器链代理对象中有一个过滤器链集合,每一个过滤器链都有一组过滤器来处理不同的请求FilterChainProxy类——doFilter()AbstractAuthenticationP原创 2022-07-16 12:21:21 · 338 阅读 · 0 评论 -
JAVA——底层源码阅读——集合ArrayList的实现底层源码分析
JAVA——底层源码阅读——集合ArrayList的实现底层源码分析一、提出问题二、查看ArrayList源码步骤1、新建java文件,把代码敲上去如下步骤2、查看源码。1、增add()2、删remove()3、改set()4、查get()步骤3、阅读和分析源码。三、尝试自定义ArrayList当前 jdk版本:jdk1.8.0_74一、提出问题集合ArrayList的底层原理是什么,它的增删改查是怎么实现的,为什么它的长度是可变的?二、查看ArrayList源码步骤1、新建java文件,把代原创 2022-05-18 15:35:15 · 747 阅读 · 0 评论 -
JAVA——底层源码阅读——包装数据类型Integer.valueOf()自动装箱方法底层源码分析
@TOC*当前 jdk版本:jdk1.8.0_74一、提出问题为什么用==进行比较Integer类型的变量,变量值不同,比较的结果也不同?如下图所示:两个赋值为10的Integer类型变量比较结果相同,两个赋值为128的Integerlei类型变量比较结果不同。二、查看源码方法途径1、查看本地文件(不推荐)1.打开Java安装路径,查看根目录,发现一个src的压缩包,这个压缩包里存放的就是jdk的源码。2.可以通过解压文件夹,如图所示按照需要查看对应路径文件途径2、在编辑器里查看jdk原创 2022-04-13 15:47:05 · 1038 阅读 · 0 评论