自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null

今天服务升级了一个版本,在发送rabbitmq消息时报错NPE。

2025-01-09 21:30:00 480

原创 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean

gateway服务启动报错,Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

2024-11-19 10:37:41 2300

原创 JedisException:Could not get a resource from the pool

最近一个老项目线上出现一个问题,操作 redis 的地方全都报错。

2024-11-12 12:02:05 398

原创 java.lang.IllegalStateException Expected lazy evaluation to yield a non-null value but got null!

最近一个老项目线上出现一个问题,偶发性的出现mongo入库没有入成功,查看日志,得到如下报错:首先找到报错的那行代码 类的 方法的97行这里的value返回了null,继续看 方法正常情况应该返回的是 的返回值,在 类的 ,可以看到这个 相当于一个懒加载的方式,如果正常走到 是不可能返回 的,所以一定是 是 ,导致走到了if语句里,返回了,我们看下这几个变量的初始化值虽然 初始化是 ,但是 是 分析下这里代码的用处,通过 来做一个懒加载的标记,一开始 是 ,代码会跳过if,给 赋值

2024-10-30 20:30:00 810

原创 Failed to instantiate [org.dromara.dynamictp.core.executor.DtpExecutor] Constructor threw exception

今天开发好的功能上到测试环境测试,服务启动后报错,开发环境启动正常,报错如下:首先根据报错可以知道是dynamic-tp动态线程池相关的报错,这次开发也确实用到了动态线程池,配置如下:再结合报错日志中ThreadPoolExecutor.java类的第1311行通过抛这个异常的if条件,可知大概率是满足了 这个条件,导致抛了异常,由于配置中未配置 ,所以 取的默认值在dynamic-tp的配置类 中可以找到如下代码再到常量类 中找到如下代码:最后可以知道取值为 这是获取java虚拟机的可用处理器数,

2024-10-30 11:05:50 1008

原创 xxl-job源码学习笔记

本文用于学习xxl-job源码,版本是当前最新版本2.4.1我这里是在码云上下载的,地址是:https://gitee.com/xuxueli0323/xxl-job具体怎么使用我这边就不多赘述了,官方文档写的非常详细,本文还是着重讲解源码首先找到配置类 可以看到实现了 接口,这里不展开,只需要知道,其实现方法 会在启动时执行即可这里创建了 (xxl-job调度器),继续看它怎么初始化的JobTriggerPoolHelper:用于触发任务执行的核心组件JobRegistryHelper:负责维

2024-08-06 22:30:00 1045

原创 Spring源码学习笔记之@Async源码

最近工作中接触到了 Spring 的@Async注解,有了了解其使用方法和源码的想法,所以有了这篇文章,本文源码来自Spring6.1.10如果不配置自定义的线程池,Spring会默认获取类型的线程池,再获取不到,会获取名为的Executor类型的线程池,其实是由自动注入的,可以通过来更改其配置不论是方法一还是方法二都有一个弊端,那就是所有的异步任务都会使用同一个线程池,所以可以使用方法三来定义多个线程池,通过实例 Bean 的方式把Excutor注入 Spring,并指定 Bean 的名称。

2024-07-25 13:09:53 1006

原创 EasyExcel的CellWriteHandler注入CellStyle不生效

类里发现确实有覆盖样式的操作,如下图:(ps:原本的2.2.7版本里是没有这个类的)方法,看这个方法名就能看出来,还要对 handler 进行排序和清理,再看下面。, 再排序清理一次,看到这里大概可以猜到了,估计我们自定义的。最近发现原本项目的导出excel功能中,写的那些。,经过排序清理之后,并不在最后,样式估计被后面的。,版本跨度比较大,所以怀疑是升级导致的问题。要解决问题,很简单,只要让我们自定义的。覆盖了,我们看下排序清理后的结果。,这3个逐个看了下源码,最终在。的源码,我们注册自定义的。

2024-05-17 18:53:26 2598 5

原创 nacos配置自动刷新源码解析

最近好奇 nacos 是怎么做到配置自动刷新的,于是就去debug跟了下源码,版本是 nacos2.2.1客户端创建RpcClient与服务端建立连接时会添加Handler处理服务端推送的请求,并且启动一个线程不断去监听配置变化当服务端某配置文件里的配置发生变化时,发送通知给到客户端,告知其某配置文件变化客户端收到变更通知,立即把该配置文件内容发送到服务端去对比,服务端返回变化的配置文件然后客户端会再次请求服务端,获取最新的配置内容,覆盖客户端的最后销毁有注解的 bean,重新初始化。

2024-02-08 15:21:29 1403

原创 nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

因为我们现在项目用的 nacos 做注册中心,后台开发想和前台开发做联调时,后台开发需要起多个服务,很麻烦,加上最近架构师在搞灰度发布,我这边就顺便利用他的这个灰度发布,来简化本地的联调方式,所以就需要把开发的服务注册到测试环境的 nacos 上,在启动服务的时候,出现了这个报错:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception。所以原因就是 nacos 的9848端口没有映射出来导致。

2024-01-12 18:54:57 10645 1

原创 Mysql死锁问题Deadlock found when trying to get lock;try restarting transaction

表的排他锁(lock_mode X),相当于两个事务都在等对方持有的排他锁,于是就死锁了。先去服务器上,看看死锁的日志,找到 mysql 的安装路径,使用如下命令登录 mysql。mysql -h 数据库IP地址 -P 数据库端口 -u 用户名 -p 库名。表的排他锁(lock_mode X),而事务2在根据主键ID更新。可以看到事务1在根据主键ID更新。去看了下代码,操作步骤如下。增加分布式锁,让并发不存在。1、根据主键ID更新。2、根据主键ID更新。3、根据主键ID更新。

2024-01-08 14:06:03 3926

原创 如何更新mongo每个数组中对象里的某个属性

最近项目中需要修复 mongo 中的数据,需要更新数组中对象的某一个属性,于是学会了一个 mongo 语句,记录下。现在我需要把订单号是 2024010500003 的订单里的两条菜品里的 foodNum 改成1。

2024-01-08 14:05:12 777

原创 Spring中是否可以存在两个相同ID的bean

1、在解析xml文件时,会去校验同一个文件中不能存在相同 ID 的 bean,如果存在,会抛异常2、在解析@Bean注解时,会去校验同一个配置类中如果存在相同名称的 bean,如果存在,先注册的生效,后面的将不注册3、在扫描@Component注解时,会校验名称相同的两个bean中,前一个如果是扫描注册的,且和后一个不是同一个bean,就会抛异常4、前3个校验都是在真正注册之前校验的,如果都通过了,会在真正进行注册的地方通过参数来判断是覆盖还是抛异常。

2023-09-26 08:44:39 1538

原创 Gateway学习和源码解析

当我们的微服务越来越多,外部需要访问,为了安全,我们需要做身份认证,认证通过,才能访问我们的服务,而当请求过来,我们需要根据请求的不同,路由到不同的服务中,而一个服务会有多个实例,请求过来还需要做负载均衡,还有当请求过多的时候,我们需要做限流,以上这些都需要我们的网关来实现。目前网关有Zuul和Gateway,因为Zuul是阻塞式编程,而Gateway是基于的响应式编程,所以Gateway的吞吐会更好,下面我们就来学习Gateway!

2023-09-22 22:00:00 777

原创 十大排序算法及Java中的排序算法

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(n log n),因此称为非线性时间比较类排序线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序最后总结下 Tim Sort 的整体流程数组长度小于2,直接返回,小于32,使用二分插入排序根据数组长度算出run(连续递增或递减的子数组) 的最小长度minRun开始循环获取run,得到run的长度,如果递减的,将其翻转,如果run的长度小于。

2023-09-13 22:15:00 428

原创 Java9-17新特性

由于 SpringBoot 3 最低支持的 JDK 版本是 17 了,加上 JDK 17 是一个 LTS 版本(Long-Term Support,长期稳定可靠的版本),所以还是有必要学习下 JDK 9 - JDK17 的新特性的。写这篇文章帮助自己记忆,也方便后续查阅。JDK 9-17 增加了许多新的特性,对我们的日常开发有很大帮助,JDK 11推出的 ZGC 是一款性能比 G1 还要好的垃圾回收器,JDK 17 也是史上最快的 Java 版本。

2023-08-30 19:45:00 361

原创 Java8新特性之——新日期时间 API

线程不安全、命名不清晰不统一、时区处理麻烦所以在 Java 8 中提供了新的日期时间 API,我们重点学习下LocalDateLocalTime三个类LocalDate年月日格式时间类型LocalTime时分秒格式时间类型年月日时分秒格式时间类型LocalDateLocalTime创建:now(),of(),parse()修改:with(),plus(),minus()比较:until(),compareTo(),isAfter(),isBefore(),isEqual()

2023-08-29 20:00:00 359

原创 Java8新特性之——Stream API

JDK 8 引入了 Stream API,它是用于处理集合数据的功能强大的库。Stream API 提供了一种更为简洁、灵活和函数式的方式来进行集合的操作和处理。不存储数据:Stream API 并不会在内存中存储数据,它仅仅是对源数据进行操作和处理的管道,当我们对一个集合或数组创建流时,流只是作为一种处理方式存在,并没有实际保存数据。不改变源数据:Stream API 的操作不会改变原始数据源中的元素,所有的中间操作(如过滤、映射、排序)都会产生一个新的流,而不是直接修改原始数据。

2023-08-25 22:00:00 242

原创 Java8新特性之——方法引用

实例方法引用(实例对象::实例方法名)静态方法引用(类名::静态方法名)类成员方法引用(类名::实例方法名)构造方法引用(类名::new)数组构造方法引用(类名[]::new)

2023-08-24 20:30:00 193

原创 Java8新特性之——Lambda表达式

Lambda 表达式是 JDK8 引入的一种新的编程语法,用于简化函数式接口的实现。Lambda 表达式的出现可以取代大多数匿名内部类,写出更简洁优雅的代码。

2023-08-24 20:00:00 186

原创 Java8新特性之——接口的默认方法和静态方法

因为实现类可以不重写接口中的默认方法,所以可以往现存接口中添加新的方法,不用强制那些已经实现了该接口的类也同时实现这个新加的方法,非常棒!在 JDK 8 之前,我们接口里只存在。默认方法可以定义方法的默认实现,使用。此外还可以在接口里定义静态方法,使用。在 JDK 8 版本里,增加了。

2023-08-24 10:17:39 141

原创 Lombok的使用及注解含义

Lombok可以通过注解来帮助我们简化实体对象(POJO)的代码书写。

2023-08-12 10:01:37 1538

原创 SpringBoot热部署

在 pom.xml 文件中添加 spring-boot-devtools 依赖。这个 key,后面打勾就可以了。在 IDEA 的设置里找到。这样就完成热部署的配置了。

2023-08-03 21:30:00 216

原创 Profile多环境配置以及结合Maven如何使用

我们在开发项目的过程中,会遇到需要使用多套环境配置的情况,因为不同环境可能存在不同的配置,比如数据库连接等等,这时候就可以用 profile 来解决。

2023-08-02 21:30:00 435

原创 Mysql删除重复数据通用SQL

在日常开发过程中,可能会出现一些 bug,导致 Mysql 数据库数据重复,需要删除重复数据,这里记录下删除重复数据的通用 SQL ,方便以后需要时查阅。

2023-08-01 22:00:00 652

原创 SpringBoot读取配置文件顺序

本文通过源码分析 SpringBoot 加载配置文件目录的顺序,以及 properties、xml、yml、yaml文件的读取顺序。

2023-07-30 12:44:36 1361

原创 MyBatis-Plus自定义sql注入器

在日常开发过程中,我们可能会发现 MyBatis-Plus 提供的那些自带的 sql 语句无法满足我们的开发需求,想要加一些自定义的 sql,而且要应用于所有的 Mapper 上,需要怎么实现呢?官方文档地址:https://baomidou.com/pages/42ea4a/编写一个自定义 sql 类,要继承类,然后实现其方法来定义 sql 语句并加入到里,也可以重写getMethod方法来修改方法名。ps:这里以。

2023-07-29 17:48:40 580

原创 MyBatis-Plus自动填充

我们在建表的时候,所有的表都会有create_id(创建人id)create_time(创建时间)update_id(更新人id)、**update_time(更新时间)**这几个字段,属于是公共字段。在新增数据时:将创建人、更新人设置成当前系统登录人,将创建时间、更新时间设置成当前时间在更新数据时:将更新人设置成当前系统登录人,将更新时间设置成当前时间因为每张表里都有这些字段,而每次我们新增修改数据,都需要更新这些字段,即使是抽出共通方法,代码也很冗余写一个类实现接口,实现其方法和方法。

2023-07-27 22:30:00 1817

原创 Mysql执行计划字段解释

每次遇到 sql 优化,查看执行计划,其中的字段是什么含义总是会忘,所以有了这篇文章方便查阅。

2023-07-26 20:00:00 440

原创 FactoryBean源码解析

是 Spring 框架中的一个接口,用来创建特定类型的 Bean 对象。实现接口就可以自定义 Bean 对象的创建过程。本身也是 Bean,会在 Spring 中经历 Bean 的生命周期,而由创建的 Bean 不经历 Bean 的生命周期。

2023-07-19 18:20:01 1124

原创 Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

Spring有两种类型的后置处理器,分别是和,这里再贴出我画的 Spring 启动过程,可以看看这两种后置处理器在 Spring 启动过程中位置。总结一下执行顺序先执行了的方法,按照顺序Ordered> 其他;再执行了的方法;最后执行的方法,按照顺序Ordered> 其他;

2023-07-06 21:00:00 10060 2

原创 @Import注解源码解析

本文将对 Spring 如何处理@Import注解的源码进行解析。

2023-07-03 23:15:00 370

原创 SpringBoot自动装配原理

Spring Boot 的自动装配(Auto-configuration)是 Spring Boot 框架中一项强大的功能,它可以根据应用程序的依赖和配置自动完成大部分常见的配置工作,减少了开发者在项目中进行繁琐的手动配置的工作。自动装配其实是通过条件化装配、自动配置类、配置属性绑定来实现的条件化装配:Spring Boot 使用条件化注解()来实现自动装配。这些注解基于运行时环境的条件来决定是否需要装配某个组件。自动配置类:Spring Boot 通过在 classpath 下的。

2023-06-27 22:40:35 5673

原创 OpenFeign源码学习

1、在SpringBoot项目启动阶段,扫描所有@FeignClient注解标注的接口,为其创建代理对象,把接口中的方法交由 FeignInvocationHandler 处理。2、当客户端调用该代理对象上的方法时,FeignInvocationHandler 会将方法调用转化为http请求,发送给服务端。

2023-06-21 23:30:00 892

原创 Java生成数学计算题,并转成exe可执行文件

然后我想着分享给其他家长用,就用Launch4j转exe文件。如果有报错的话,估计是没有设置主清单属性。然后点击小齿轮,填上launch4j。pom文件中要引入itextpdf。需要在pom文件中增加如下代码。安装后运行会出现这样的画面。最后给上我转好的exe文件。在Basic下配置这两个。最后点击运行按钮就可以了。

2023-06-21 10:31:41 310

原创 Mybatis插件原理

首先自定义插件要实现 Mybatis 的 Interceptor 接口,然后实现这个接口的3个方法,最后在类上打上 @Intercepts 注解,并用 @Signature 注解标注要拦截的接口名称、方法名称以及参数列表。我们用 Executor 来举例//增加自己的逻辑 log . info("执行器-------自定义处理逻辑");} }

2023-06-18 11:08:07 416

原创 Mybatis源码学习

本篇文章只是简单的带大家过一下整个Mybatis的流程,先有个初步的认识,后续有机会,再针对性的剖析细节。

2023-06-13 18:19:42 1323

原创 Java8函数式接口Consumer的实际应用

在项目开发的过程中,发现有很多业务,需要对一个大的集合做分批处理,于是利用函数式接口Consumer写了一个共通的处理方法,如下。其中的doSomething是分批后的业务处理方法,自行修改。

2023-06-09 17:59:42 238

原创 MongoDB查询字符串日期列等于系统日的数据

帮项目组同事写一个sql,要求查询出业务日期等于系统日的数据,因为项目中业务日期字段用的是字符串格式,于是不知道怎么写,求助我,想到mongo是支持js脚本的,于是用js脚本先写了一个求当天日期字符串的函数,再去查询。把脚本里的 collection 改成自己的集合名,businessDate改成自己的字段名称。

2023-05-25 22:43:07 341

原创 SpringBoot内置tomcat参数调优,最大连接数、队列长度、最大工作线程数、最小工作线程数

因为看到一道面试题,问SpringBoot默认可以接受的最大并发量是多少,这个问题其实考的是web服务器的配置,因为SpringBoot默认的web服务器是tomcat,于是去了解了一下tomcat的相关配置。

2023-05-25 22:41:05 3051 1

Java生成数学计算题,并转成exe可执行文件

Java生成数学计算题,并转成exe可执行文件

2023-06-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除