自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java校验字符串是否符合指定的日期格式

3、校验正例:2025-10-10 13:30:10,反例:2025-10-10 13:30:10a 或 2025-1-1 13:30:1 等。2、示例日期格式模板为:yyyy-MM-dd HH:mm:ss,只要不符合此格式的字符串一律校验不通过。1、上述示例代码可用于校验指定日期格式模板的日期字符串。

2025-10-14 10:30:00 36

原创 mysql使用 order by + limit (排序、分页)的时候出现数据重复及数据丢失问题

如果order by的字段有多个行都有相同的值,mysql是会随机的顺序返回查询结果的,具体依赖对应的执行计划。也就是说如果排序的列是无序的,那么排序的结果行的顺序也是不确定的。在 mysql 查询脚本中,排序分页是最常见的查询,但这其中会有一个问题,就是排序列的值如果大量重复、且排序列没有索引,会导致分页查询出来的数据重复或丢失。从每页的查询结果来看,id为 17、18、19、20、21 等都是重复的数据,id为 1、23、24、25、26 等数据丢失了。1、各个拍序列的值组合起来不重复。

2025-09-29 15:11:25 221

原创 Docker部署Nacos 3.0.x

2、找到数据卷对应目录下的配置文件,更新其相关持久化等配置项。一、拉取镜像,这里以 nacos 3.0.3 版本为例。这里不是强制,也可以使用常用的直接挂载到宿主机目录。三、创建持久化数据库,并执行脚本。3、配置文件完成后,重启容器。四、创建容器以及相关配置。五、访问验证,部署成功。

2025-09-18 13:47:03 186

原创 linux系统查看日志信息 tail -f x.log | grep -A 50 “Exception“ 命令组合拳用法

【1】查找 NullPointerException,并显示后面 50 行信息。【1】使用 箭头 ↑↓ 或 Page Up/Down 键来上下滚动。【1】只要异常一出现,它就会自动打出来,堆栈信息也一并输出。【2】输入 G 直接翻到末尾,方便快速查看最新的日志。【2】按 Ctrl + C 停止。【3】按 Q 键退出。

2025-08-20 13:36:52 105

原创 springboot项目中api接口响应对象忽略值为null的属性几种方案

1、如果希望有粒度的控制,推荐第一种方案。2、如果希望全局生效,推荐第二种方案。2、方式二:配置Baen。作用到对应的类上即可。1、方式一:配置文件。

2025-08-20 13:33:07 104

原创 java分片读取大文件内容、及分片写入到缓冲输出流

【1】推荐使用 try 管理资源,会自动冲刷、自动关闭资源,无需手动调用 bos.flush()、bos.close()2、使用 BufferedInputStream.transferTo() 方法写入到缓冲输出流,代码示例。【2】如果不使用 try 管理资源,务必在操作最后,手动显示调用 bos.close() 关闭资源。1、使用字节码分片读取、分片写入,代码示例。

2025-07-17 14:30:00 273

原创 SpringBoot项目中读取 resources 资源目录下文件的几种方式

【2】需要注意读取的路径书写可能有差异,比如 ResourceLoader 和 ApplicationContext 读取路径必须带 classpath(classpath:template/test.txt)1、使用 this.getClass().getClassLoader()4、使用 HuTool 包下的工具类 ResourceUtil。【1】以上各个方式都可以读取项目资源目录下的文件。3、使用 ApplicationContext。2、使用 ResourceLoader。

2025-07-17 10:30:00 91

原创 java中常用的 @JsonInclude、@JsonIgnore、@JsonIgnoreType、transient关键字修饰字段、@Transient 忽略字段、@JsonAlias等解释

1、通常在一些特殊场景,为了保护某些敏感字段如密码、银行卡号等禁止返回给前端看,所以需要用到属性字段忽略,json序列化方面可以用 @JsonIgnore注解 或 transient关键字修饰字段。【2】@JsonIgnoreType:作用于类,引用该类的单个对象属性会被忽略,但集合列表类的属性不会被忽略(需要注意)属性别名,当入参传入的属性名称是别名中的任意一个,传入的值都可以映射到被标注的这个属性上。【1】@JsonIgnore:作用于属性字段,则忽略该字段不会被序列化。

2025-06-28 15:30:00 316

原创 场景问题:如何解决订单重复支付的问题?

在电商订单系统中,会涉及多种支付方式,例如微信支付、支付宝支付、银联支付等。一、如果立即付款按钮有和后端交互,则使用分布式锁,保证支付请求是串行的,只允许拿到锁的请求执行支付动作。未拿到锁的支付线程给予提示“此订单已在支付中”即可。2、保证回调线程串行化,第一个回调线程必然会成功并且更新订单状态,而第二个回调线程做幂等校验发现该订单已支付成功,则直接发起退款即可。1、既然都支付成功了,那必然都会有回调动作,关键就在于回调动作,可以利用分布式锁保证此订单的支付回调动作是串行化和幂等性的。

2025-06-28 10:00:00 249

原创 Spring中过滤器 RequestContextFilter 和拦截器 HandlerInterceptor 有什么区别以及适用场景

在Spring系列中,RequestContextFilter(过滤器)和 HandlerInterceptor(拦截器)是处理HTTP请求的两个核心组件,但它们在执行时机、功能定位上有所不同。请求 → 过滤器1 → 过滤器2 → DispatcherServlet → 拦截器A → 拦截器B → Controller → 拦截器B → 拦截器A → 过滤器2 → 过滤器1 → 响应。由于在 Servlet 容器层级执行,对所有请求生效,所以要避免复杂逻辑影响性能。【2】精细化控制相关逻辑用拦截器。

2025-06-26 14:00:00 92

原创 Spring应用上下文事件 ApplicationContextEvent 的各个子类(ContextRefreshedEvent、ContextClosedEvent)等监听以及触发时机

应用上下文事件(ApplicationContextEvent)机制,用于监听应用上下文各个阶段触发不同事件,从而处理一些特殊逻辑或架构设计。3、常用的应用上下文事件为:ContextRefreshedEvent、ContextClosedEvent。【1】ContextRefreshedEvent:应用上下文初始化完成或上下文刷新完成立即触发。【2】ContextStartedEvent:应用上下文启动触发。1、可以通过实现应用上下文接口,监听应用上下文事件。

2025-06-26 10:30:00 215

原创 Redis集群原理是什么

2、自动故障转移:当主节点出现故障时,哨兵会选举一个从节点晋升为主节点,并让其他从节点指向新的主节点。4、动态扩展:可以方便地向集群中添加新的节点,通过重新分配哈希槽,将数据从现有节点迁移到新节点上,实现集群的水平扩展,提高集群的存储和处理能力。2、故障转移:当某个主节点出现故障时,集群会自动检测并通过选举机制从其他正常的从节点中选择一个晋升为主节点,以保证集群的高可用性。3、节点通信:节点之间通过 gossip 协议进行通信,互相交换集群的状态信息,包括节点的存活状态、哈希槽的分配情况等。

2025-06-21 15:00:00 395

原创 Spring使用装饰器 TaskDecorator 实现 ThreadPoolTaskExecutor、@Async、CompletableFuture 异步任务线程之间上下文副本变量传播

在实际工作中,异步线程是最常用的技术之一,但当执行新的异步线程时会丢失主线程中的上下文信息,如:MDC、SecurityContext、RequestContextHolder.getRequestAttributes()等,基本上只要是通过 ThreadLocal 存储的线程副本信息,Spring默认都不会自动传递到新线程。【1】使用 TaskDecorator、复合多装饰器写法、ContextPropagatingTaskDecorator、以及手动传播,都可以实现异步线程切换传播上下文副本。

2025-06-21 10:30:00 242

原创 java中下载文件或导出文件到response的输出流中,文件名称乱码的文件解决方案

1、自定义导出的文件名称,需要进行url编码如此,下载后可以获取到指定的文件名

2025-06-20 15:30:00 235

原创 java上传文件把客户端传入的 MultipartFile 的输入流转为(写入) File 文件对象

【代码】java上传文件把客户端传入的 MultipartFile 的输入流转为(写入) File 文件对象。

2025-06-20 10:30:00 178

原创 java自带的常用队列 ConcurrentLinkedQueue、LinkedBlockingQueue、PriorityBlockingQueue 介绍

在一些特殊场景中,比如并发量较高的场景,需要对海量请求进行流量削峰,此时采用jdk自带的队列来作为缓冲就是个不错的选择,这里介绍一下java中常用的队列,可以理解为本地队列。【1】优先级阻塞队列,主要特点:无界、可选根据优先级排序(自然顺序或Comparator,默认自然顺序正序)、阻塞、线程安全。【1】链表阻塞队列,主要特点:无界(可选有界)、先进先出、阻塞和非阻塞可选、线程安全。【1】并发链表队列,主要特点:无界、先进先出、非阻塞、线程安全。【2】适用场景:对先进先出顺序有要求、灵活选择阻塞或非阻塞。

2025-06-19 15:00:00 191

原创 mybatis plus构造sql脚本无法识别关键字字段,解决方案

使用 mybatis plus 构造的脚本中如果有关键字,例如 desc、force 等或其他关键字,如果关键字不转义的话,执行会直接报错。

2025-06-19 10:30:00 250

原创 Spring事务同步器(TransactionSynchronizationManager)+ 事务钩子函数的使用案例

在实际开发中,通常会有这样的需求,主线程执行业务逻辑后需要发送异步消息到MQ或者需要执行异步线程任务,此时可能主线程的事务还没提交,就会导致在异步任务中查询不到主线程写入库的数据,因此这里需要使用Spring提供的事务同步器和事务钩子函数来解决这个问题。【2】声明式事务中也可以使用 TransactionSynchronizationManager.isSynchronizationActive() 判断当前线程是否有事务,有事务则注册事务同步器执行事务回调函数,将异步任务放在回调钩子函数中执行即可。

2025-06-11 15:30:00 279

原创 windows电脑解决笔记本搜索不到wifi问题

windows笔记本电脑明明打开了wifi功能,却搜索不到wifi,此问题可能是网络适配器被禁用的原因导致,通过以下方法也许能解决,无需重启电脑。1、右键点击网络或wifi图标,打开界面”网络和internet“3、启用WLAN,然后重新打开wifi连接即可。2、选择”高级网络设置“

2025-06-11 14:00:00 1119

原创 Java中方法调用参数传递机制的理解和示例验证

在Java中,方法调用参数的传递机制是值传递,对引用类型传递的是引用的副本(不是真正的引用传递),也就是说在被调用方法中对参数引用副本重新赋值不会影响原始引用。【2】如果传递是引用类型,则传入的是原始引用副本(不是原始引用),更改引用副本内容会影响原始引用的值,但重新赋值不会影响原始引用(只在当前方法中生效)【1】重新赋值参数会影响调用方的变量:只有更改对象内容有效,重新赋值引用无效。【1】如果传递是基本类型,则直接传递值的副本,方法内重新赋值不会影响原始值。输出结果:2,3,4。

2025-06-09 14:30:00 194

原创 Java中异步编程 CompletableFuture.allOf()、CompletableFuture.get()、CompletableFuture.join() 的使用案例和适用场景

【2】CompletableFuture.get() 和 CompletableFuture.join():此二者方法都是用于阻塞主线程(调用线程),等待所有任务完成并获取结果。【1】在使用 CompletableFuture.allOf() 组合任务后,通常需要阻塞主线程(调用线程)等待任务完成。【2】优先推荐使用 allOf.join(),此方法可以更灵活的用于链式任务中获取结果。【1】CompletableFuture.allOf():用于组合多个异步任务。

2025-06-09 10:12:13 602

原创 Spring中过滤器 RequestContextFilter 和 OncePerRequestFilter 的区别

在Spring中,RequestContextFilter 和 OncePerRequestFilter 都是处理HTTP请求的关键组件,但它们的职能和使用场景有着不同的区别。【3】实现原理是通过 ThreadLocal 存储 ServletRequestAttributes 的属性值,以供当前整个请求线程生命周期内可以直接访问上下文信息,而无需通过方法参数传递。确保每个请求的过滤逻辑仅执行‌一次,@Order(1)确保改过滤器逻辑优先执行。【2】适用于请求只需要执行一次过滤逻辑的场景。

2025-05-30 14:30:00 241

原创 Java中删除文件、删除文件所在的目录,递归删除文件夹目录中的文件

一、删除文件、删除文件所在的目录,示例代码。二、递归删除文件夹目录中的文件,示例代码。

2025-05-30 10:00:00 378

原创 java中什么情况会导致 OOM(内存溢出)

OOM(OutOfMemoryError)是 JVM 内存不足无法为新对象分配内存抛出的严重错误,会导致‌应用崩溃、服务中断、性能骤降‌等问题。3、ThreadLocal、MDC等线程传递或共享变量使用后没有进行清理。1、代码中出现死循环空转、大量创建大对象等。2、资源未关闭,如:文件流、IO流。

2025-04-17 15:00:00 333

原创 java中什么情况会触发FullGC,如何避免频繁FullGC

2、选择合适的 GC 回收器,推荐(G1GC、ZGC)。避免使用CMS(该回收器已被弃用,且该回收器会导致内存碎片化,从而导致堆内存不足而触发FullGC)FullGC 为全量垃圾回收(完全垃圾回收),是 JVM 性能问题的典型信号,会直接影响应用的‌稳定性、吞吐量‌和响应速度‌。【1】频繁 FullGC(尤其是使用CMS”并发-标记-清除“算法的垃圾回收器)可能导致堆内存碎片化。【2】碎片化导致可用内存不足,即使总内存足够,仍会导致OOM(内存溢出)或触发FullGC。【3】系统整体处理能力降低。

2025-04-17 10:30:00 1593

原创 shardingsphere-jdbc集成Seata分布式事务

【1】shardingsphere-transaction-base-seata-at 的版本最好与 shardingsphere-jdbc 版本一致。(1)事务组名称可以自定义,但要与seata服务端配置文件(seata-server.yml)中配置的事务组名称一致(否则报错),【1】shardingsphere-jdbc 集成 seata 与 单数据源集成 seata 完全是各自独立的方式(不搭嘎)【2】在被调用方的服务中配置 seata 支持的事务传播拦截器,获取调用方传递过来的 TX_XID。

2025-04-16 14:30:00 949

原创 Docker部署安装Seata 2.2.0

【1】mysql-connector-j-9.1.0.jar 传入到 lib 目录下(/seata-2.2.0/seata-server/lib)5、把上述的文件 mysql-connector-j-9.1.0.jar、Dockerfile 分别传入Seata解压后的项目中。【2】apache-seata-2.2.0-incubating-src.zip 为了方便找到脚本、配置文件等。【1】apache-seata-2.2.0-incubating-bin.tar.gz 用来构建镜像。

2025-04-16 10:00:00 372

原创 SpringBoot项目集成Seata 2.0.0

【1】tx-service-group:事务组的主要作用是用于服务发现TC(事务协调器)服务集群,TC管理事务的提交或回滚。如果多个服务用同一个事务组可能会导致TC负载过高、事务管理混乱等问题。【4】必须在集成 seata 服务对应的数据库中创建 undo_log 表,【3】vgroup-mapping:注意事务组映射关系,不能配置错。【1】经测试验证,调用链全局事务可以正常回滚。被调用方正常开启分支事务(本地事务)即可。1、需要提供以下服务。【1】nacos服务。【2】seata服务。

2025-04-10 15:30:00 753

原创 Docker迁移root目录(根目录)至新的目录,可解决因docker目录磁盘空间满了导致容器无法运行、崩溃等问题

1、Docker 的根目录是指 Docker daemon 存储镜像、容器和所有相关文件的地方,Docker服务的默认存储目录位于 /var/lib/docker,如果需要新的目录(更大的磁盘分区或自定义路径)通常需要迁移到空间更大的目录。使用 rsync 将原数据完整复制到新目录(例如新目录为 /home/docker),大概需要等待几分钟时间。2、Docker 会为每个容器创建⼀个单独的目录,该目录包含该容器所需的所有文件系统内容。【2】data-root:对应的目录要确保存在。6、查看是否迁移成功。

2025-04-10 10:30:00 523

原创 windows系统桌面快捷箭头去掉、恢复方式,支持win10、win11

将上述代码放入txt文件中,然后改为bat文件,直接双击执行即可。将上述代码放入txt文件中,然后改为bat文件,直接双击执行即可。一、windows 11。二、windows 10。

2025-04-09 15:30:00 1063 1

原创 SpringBoot配置上传文件临时解析处理目录、临时存储目录

spring.servlet.multipart.location 是 Spring Boot 中用于‌配置文件上传时临时存储目录‌的关键属性。它的作用是为 HTTP 多部分请求(文件上传)生成的临时文件指定存储路径。支持 multipart/form-data 类型的 HTTP 请求(例如表单文件上传),确保文件在写入临时目录后能被正确解析和处理。当客户端上传文件时,Spring 会先将文件内容写入磁盘的临时目录(而不是直接加载到内存),避免大文件占用过多内存。【1】确保应用对指定目录有‌读写权限。

2025-04-09 10:00:00 484

原创 Java设计模式-单例模式

【3】存在的问题:JVM可能对(分配内存空间、初始化对象、赋值)进行指令重排序打乱顺序,导致其他线程在第一次判空时看到 instance!【2】instance = new Singleton():实例化对象分为3个阶段:分配内存空间、初始化对象(调用构造函数)、将变量instance指向内存地址。【1】线程安全:JVM 保证枚举实例的初始化是线程安全的(静态块加载)【3】防序列化破坏:枚举的序列化机制天然保证反序列化时不会生成新实例。【2】防反射攻击:Java 禁止通过反射创建枚举实例。

2025-04-08 15:30:00 295

原创 git项目pull报错Cannot check the working tree for unmerged files because of an error.

一、报错信息:Cannot check the working tree for unmerged files because of an error。检查,防止在权限不明的目录中执行命令。1、Git 2.36+ 引入了。

2025-04-08 10:00:00 913

原创 java中自动转义分割或动态分割文件对象路径【path.split(Pattern.quote(FileUtil.FILE_SEPARATOR))】,分割结果为数组或集合

若直接使用 split(FileUtil.FILE_SEPARATOR) 代码实际会变成 split("\"),导致语法错误。【4】FileUtil.FILE_SEPARATOR 返回的分隔符(如 \ 或 /)在正则中有特殊含义,需转义后才能正确分割:Pattern.quote(FileUtil.FILE_SEPARATOR)【1】建议首先获取文件对象,通过文件对象 file.getPath() 获取文件路径。

2025-04-07 15:00:00 140

原创 MySql 主从复制,常见的问题

【2】master_auto_position 启动GTID自动定位,如果处于1启动状态则主从链路无法设置(master_log_file、master_log_pos)等信息。slave-skip-errors 的取值可查看 Last_SQL_Errno 的值,与之对应。【2】分别重启mysql服务后,在从服务更新主从链路信息(启用 GTID 自动定位)3、配置主服务器,修改my.cnf文件,允许非 SSL 连接(关闭安全连接)【1】master_auto_position 对应的值:1-开、0-关。

2025-04-07 10:30:00 555

原创 集成 shardingsphere-jdbc 常见问题

1、sharding.yml 文件中配置项要求非常严格,注意属性缩进、最好也不要出现汉字(包括注释汉字)、不能配置 shardingsphere-jdbc 不需要的额外其他属性。【2】actualDataNodes:把逻辑表映射到实际表命名规则。语法:数据源逻辑名_序号索引值.逻辑表名称_序号索引值,示例:ds_${0..1}.t_${0..1}【1】t:是逻辑表名称(一般取表前缀),逻辑表和实际表映射。【1】不配置此项加载单表,则会报错。2、违反1规则,可能会报错。

2025-03-29 14:30:00 950

原创 SpringBoot3.x 集成 shardingsphere-jdbc 实现读写分离

【1】jdbc:shardingsphere:classpath:是数据源配置文件路径的前置固定写法,后面sharding-config.yml是刚才创建的数据源配置文件目录和名称。3、打开 bootstrap.yml 文件,添加 ShardingSphereDriver 驱动,以及数据源配置文件的路径。1、在 resources 目录下创建 sharding-config.yml 文件,并添加配置信息。【2】读写库配置、负载均衡规则、分片配置逻辑表等。【3】不同数据源对应的url属性有所不同,说明。

2025-03-29 10:30:00 781

原创 docker部署安装Seata服务

该文件 application.yml 在 seata 项目的 seata\conf\application.yml 目录下,以及配置案例文件(application.example.yml)2、在nacos配置中心,创建 seata-server.properties 或 seata-server.yml 配置文件。【1】脚本可以在我们前面下载的seata项目包的 seata\script\server\db\mysql.sql 找到。【2】SEATA_IP:用于注册中心seata实例的ip。

2025-02-23 15:30:00 497

原创 解决seata服务常见异常问题

【1】docker创建容器时,显示的分配内存即可 -e JVM_XMS=256m -e JVM_XMX=512m。一、错误信息,此问题可能会出现在docker或k8s部署seata服务时出现。【1】看日志信息,很明显无法分配内存。

2025-02-23 14:00:00 282

原创 MySQL中ddl操作或创建索引防止锁表的一些建议或解决方案

【说明】目前没有任何一种办法可以保证在DDL操作下能完全避免锁表。(1)lock的可选项除了 none,还可以使用 shared(共享锁:允许读操作,但会阻塞写操作)【说明】使用 algorithm = inplace 原地算法,减少对数据库性能的影响。(2)在生产环境中对数据量较大的表进行DDL操作,选择在流量较小的时段执行较为合适。【说明】使用 lock = none 明确告诉MySQL在创建索引时不锁表。(1)建议在生产环境中进行任何重大DDL更改,都要在测试环境充分测试验证。

2025-02-17 15:00:00 527

空空如也

空空如也

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

TA关注的人

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