- 博客(130)
- 收藏
- 关注
原创 rabbitmq-spring-boot-start2.0.0重磅重构升级
本文分享了作者开发RabbitMQ Spring Boot Starter的经验与源码解析。作者介绍了1.x版本在生产环境使用一年后被移除的谨慎决策,转而采用更稳妥的方案。重点分析了Spring Boot启动流程中的关键方法refresh(),详细剖析了registerBeanPostProcessors()和doGetBean()等核心方法的执行逻辑。通过源码解读展示了Spring容器初始化过程中bean的创建与管理机制,为理解Spring框架底层原理提供了实用参考。
2025-12-04 19:56:39
836
原创 deploy发布项目到国外中央仓库报如下错误Project name is missing
本文分享了推送项目到Maven中央仓库时遇到"Project name is missing"错误的解决方案。原因是中央仓库升级后要求pom.xml必须包含<name>标签,且其值需与<artifactId>相同。作者还提到通过后台设置Namespace可以支持推送SNAPSHOT版本。文章最后预告了下期将分享rabbitmq-spring-boot-start2.0.0的重构升级内容。
2025-12-04 19:50:08
130
原创 RabbitMq消费延迟衰减重试实现思路
本文介绍了基于RabbitMQ的延迟消息实现方案。主要内容包括: 定义了通用的MQ消息基类MqMsgDto,包含延迟等级和消息体字段; 设计了20级延迟时间枚举DelayTimeLevelEnum,从1秒到48小时不等,参考了RocketMQ的延迟等级设计; 展示了消费者实现示例,支持自动衰减重试,超过最大重试次数后停止重发; 分析了RabbitMQ的三大超时限制:消息TTL上限约49.7天,消费者ACK超时默认30分钟可配置,客户端连接超时默认60秒。 该方案通过延迟等级+衰减重试机制,实现了灵活的消息延
2025-11-13 20:53:25
719
原创 RabbitMq消费消息遇到的坑
RabbitMQ消息消费异常处理与确认机制的正确实践 摘要:本文分析了RabbitMQ消费过程中常见的"PRECONDITION_FAILED - unknown delivery tag"异常原因及解决方案。该异常通常由于手动确认配置不当导致,包括重复ACK、自动确认模式下手动ACK、跨Channel确认等情况。正确的做法是:1)在yaml中明确配置acknowledge-mode:manual;2)每条消息只确认一次;3)确保Channel一致性;4)合理设置prefetch数量。文
2025-11-13 20:50:02
790
2
原创 手写好用异步工具类
ZlfLatchUtils是一个基于CountDownLatch的并发任务执行工具类,主要功能包括: 提供单例线程池管理,支持自定义拒绝策略 支持提交Runnable和Callable两种任务类型 实现两种任务执行模式: waitFor():无返回值的并行任务执行 waitForResult():带有返回值的并行任务执行 使用ThreadLocal存储任务信息,确保线程安全 支持超时控制,通过CountDownLatch同步任务执行状态 提供异常处理和日志记录能力 该工具类适用于需要并行执行多个任务并等待所
2025-11-13 20:45:36
121
原创 字符和字节
摘要: 本文澄清了中文字符的计算问题:1) 从字符角度看,1个汉字=1个字符(与英文字母相同);2) UTF-8编码下,1个汉字占3字节而非"2个字符"的说法是历史误解(源自GBK编码将2字节误称为字符)。关于MySQL的VARCHAR(450):使用utf8mb4字符集时可存储最多450个汉字(字符数限制),实际字节占用取决于编码(utf8mb4每个汉字3-4字节,gbk为2字节)。核心结论:字符(character)与字节(byte)需区分,现代编程以1汉字=1字符为准。
2025-11-13 20:42:41
645
原创 XXL-JOB-Admin后台手动执行任务传参过长被截断问题解决
本文针对XXL-JOB定时任务参数过长被截断的问题,提出两种解决方案:一是将参数拆分为较短部分分批执行;二是通过HTTP工具直接调用任务触发接口。重点介绍了第二种方法,包括如何获取接口URL、cookie参数和addressList地址,并通过Postman等工具发送form-data格式请求。该方法绕过了前端参数长度限制,解决了长参数执行失败的问题。文章通过分析XXL-JOB源码,结合实际操作截图,为开发者提供了有效的技术参考。
2025-09-14 12:39:21
882
1
原创 BigDecimal账户分布式原子操作
在微服务分布式大行其道的今天,在mysql数据库频繁使用的今天,假设让你设计一个账户系统,账户充值扣款消费退款等相关的需求,还是使用传统的mysql数据库的表来实现吗?
2025-08-31 21:41:15
727
原创 XXL-JOB任务执行The access token is wrong问题分析解决及原理源码解析
希望我的分享对你有所启发和帮助,请一键三连,么么么哒!
2025-08-31 21:37:19
1067
原创 pdf转ofd之移花接木
本文介绍了两种将PDF转换为OFD格式的方法及其注意事项。第一种使用Spire.PDF.Free类库,但免费版存在10次转换限制,不推荐使用。第二种采用国产开源类库ofdrw,但由于其依赖的PDFBox版本较低(2.x),升级到3.x版本会导致兼容性问题。作者通过修改ofdrw源码中的PDFConverter类,替换PDDocument.load()方法为Loader.loadPDF(),成功实现了与PDFBox 3.x的兼容。文章分享了具体修改步骤和依赖配置,为遇到类似问题的开发者提供了实用解决方案。
2025-08-30 10:03:02
754
原创 两个时间比较方法理解及使用会遇到的大坑
本文总结了Java中时间处理的常见格式、转换方法和比较方式,并重点指出了两个易错点。常用时间格式包括"yyyy-MM-dd HH:mm:ss"等标准形式。在字符与时间互转时,推荐使用LocalDate/LocalDateTime的parse方法和DateTimeFormatter的format方法。时间比较可通过isBefore/isAfter/isEqual或compareTo实现。文章特别提醒两个大坑:1)"YYYY"与"yyyy"的区别——前
2025-08-30 09:57:14
990
原创 windows10下安装docker且使用wsl2安装双系统并构建最小jre镜像和应用镜像
由于几年前我刚开始接触docker这个东西就觉得是挺神奇挺好用挺奈斯的一个创造性产品,它的思想是:“以此构建,到处运行”,真的是很方便,给开发和运维带来了很大的便利性,同时也是极大地简化部署难度,同时也带来了很大的效率提升,屏蔽了部署环境的差异引发的开发、运维之间的相互吐槽和刷锅行为,提升团队迭代开发效率,同时让生产效率也大大提高了,俗话说:”兴趣是最好的老师”,所以作者就开始了docker的学习实践之路,我相信云原生是未来软件架构的方向和标配,也是大势所趋。...
2025-05-03 22:12:08
2743
8
原创 乐企数电发票分布式发票号码生成重复的问题修复思路分享
由于之前接了乐企数电开票,服务上线之后,使用的公司少没有啥问题,后面切换了两家日开票量大的公司上线之后,就发现发票号码生成重复了,后面下班紧急修复了,修复到凌晨3点发了一个版本上去,之后才没有重复的,这次其实是歪打正着的搞好了,后面我思考分析了下之后重新优化了之后上了几个版本后观察,使用数据库表的方式还是会有一定的概率会重复,之前歪打正着是因为使用了@Transactional注解,事务传播级别设置为READ_COMMITTED,后面揭晓为啥是歪打正着。
2025-04-27 21:48:56
1514
原创 disruptor-spring-boot-start版本优化升级
由于之前写了一篇《disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明》的文章,里面说本地启动没有啥问题,后面我启动之前写的那个测试的controller发现,本地电脑的CPU直接干100%了,于是乎我就有点纳闷了,这个也太奇葩了,然后我思考了下,知道是啥原因了,原因是:之前那个版本里的初始化的实力有7个disruptor实例,注释了只剩第一之后启动本地电脑CPU占用在50%左右(等待策略是YieldingWaitStrategy的版本),紧接
2025-04-27 21:42:18
510
原创 spring-rabbit的CachingConnectionFactory默认参数导致消费者Channel数量暴增问题解决
由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百,最多的要干到900多个了,于是乎我就去看了下之前我写的组件的源码,然后去查了下CacheMode的两种模式及相关的参数设置,最终找到了这个是由于一下参数没有设置导致的:RabbitProperties类中的静态内部类Channel中的size和checkoutTimeout没有设置/**/**
2025-04-27 21:39:04
903
原创 rabbitmq-spring-boot-start版本优化升级
由于之前手写了一个好用的rabbitmq-spring-boot-start启动器,虽然实现了相关的功能,但是还有一点小问题,这个也是最近在项目中使用我写的这个组件发现的一个问题,所以修复升级了,maven依赖已经退推送到中央仓库上了,只需要引入依赖,然后简单的配置就可以实现发消息了,使用上会有一点需要注意的,请听下文分解。
2025-04-23 18:05:26
1282
原创 disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明
好看的皮囊千篇一律,有趣的代码万里挑一啊,有句名言说得好:实践是检验真理的唯一标准!本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!
2025-04-23 18:01:54
268
2
原创 使用shell脚本批量curl调用POST接口
这篇文章是使用shell脚本批量调用GET接口的方式,后面项目中需要手动去触发调用接口重新生成数据,由于上线之后有问题的数据比较多,所以一条一条的去触发就不得行了,数据多了,手动一条去处理,就相当于人肉手动方式,效率低,也容易出错,如果使用shell来批量调用岂不是美哉,废话多不多说,直接上code。
2025-04-22 17:38:15
372
原创 接口对外安全交互新姿势
由于这久做了一个乐企数电开票的项目,已经上线了,真的是一言难尽,再回首已经是轻舟已过万重山,接口通过外网暴露给业务方使用,由于业务方的服务是在阿里云上,我的这个服务是在华为云上,所以k8s上的服务只能通过service对外暴露出去给阿里云上的业务侧使用,所以我就有了下面的这个思路,使用ip白名单和sm2对请求body的做解密,响应做加密,只需要把秘钥和加密工具类对给业务侧就可以安全的调用接口,其实在华为云上可以在负载均衡器上配置白名单,只允许阿里云上那几台服务器的ip访问,所以在项目中就不用加这个i
2025-03-12 13:21:13
1221
原创 sa-token之@SaIgnore注解失效的真正原因及正确姿势
sa-token之@SaIgnore注解失效的真正原因及正确姿势 由于之前在项目中使用了sa-token,在使用的过程中发现@SaIgnore注解失效,之前以为是aop切面失效了,不知道失效的真正原因,那本文分分享其失效的真正原因及真确姿势,之前分享文章导读:2.原因2.1原理 首先需要了解Filter、Interceptor、AOP及MVC的原理及调用先后顺序,看上面的几张图可以说是一下子豁然开朗了。 该类在:sa-token-core包中,此包只要引入了sa-token的相关包,会自动引入
2025-01-14 22:07:26
1466
原创 自定义注解使用AspectJ切面和SpringBoot的Even事件优雅记录业务接口及第三方接口调用日志实现思路
在日常的开发中经常会遇到对接第三方系统,如:各种支付(微信支付、支付宝支付。
2025-01-14 21:58:49
744
1
原创 自定义注解之AspectJ切面动态代理使用注意事项
Slf4j@Aspect@Component//切面表达式写法还有很多种//之前逻辑try {//异常逻辑//之后逻辑通过这点东西,后面会写一篇文章分享,如何优雅自定义注解使用AspectJ切面及SpingBoot的Event机制记录业务接口调用日志及第三方接口调用日志,这个思路实现之后对于后期排查问题是非常的方便,本次分享到此结束,希望我的分享对你有所帮助,请一键三连,么么么哒!
2025-01-14 21:52:59
367
原创 SpringBoot项目分离与分层方式之容器化部署
SpringBoot项目分离与分层方式之容器化部署 之前也分享过分离与分层方式部署,本文只不过将之前的那两种方式放到了容器中来部署运行,里面多多少少还是有点坑在里面的,要相对简单一点直接使用如下命令部署: 使用容器部署方式就比这种更高级优雅一点,根据个人喜好去选择适合自己的部署方式。 之前的文章链接如下:2.deom项目工程结构 这里只展示build的配置3.2子模块3的Dockerfile 容器中工作路径下有app.jar、config。resources这几项. 子模块3打包之后
2025-01-10 01:40:11
1035
原创 Docker Desktop 构建java8基础镜像jdk安装配置失效解决
Docker Desktop 构建java8基础镜像jdk安装配置失效解决 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像,前几天我使用Docker Desktop环境重新构建了一个java8最小jre基础镜像,使用之前windows上使用的dockerfile构建是没有啥问题,但是本地项目引入该基础镜像之后,启动应用的容器,查看日志发现报了一个如下错误: 这也是一个奇葩的问题,在Linu
2025-01-10 01:35:36
1139
原创 之前手写的两个好用开源组件优化升级
这两个手写开源好用的组件是在日常项目实践中发现了一些问题,后面优化了迭代了,依赖包都推送到maven中央仓库上了,项目中直接引入对应的maven依赖包安装教程配置一下,就可以方便轻松快捷的使用我给大家提供的开源组件了,解决对应的业务问题还是一把利器的,简化代码,纵享丝滑,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!
2025-01-10 01:31:50
620
原创 Mysql深度分页之MyBatisPlus百万数据分页优化新姿势
前段时间,我司会员表有600多w数据分页查询特别的慢,于是乎我去explain了一下分页查询的sql是由于没有走索引,导致全表扫描,查询特别的慢,由于会员表有一个逻辑删除的字段,所以查询的时候sql条件会默认第一条件就是逻辑删除的字段,这个之前的文章也有分享过这个逻辑删除字段在查询第一个导致索引失效的坑,于是乎在之前加的索引上把逻辑删除字段加在索引第一列之后,分页查询sql就走了索引,没有之前那么慢;
2024-12-28 18:19:41
1701
1
原创 Docker安装体验kuboard-k8s多集群管理工具
本次分享介绍了通过docker的方式快速部署安装kuboard-k8s多集群管理工具体验,它的官网上的文档非常的详细,还有一些关于k8s知识的分享,让我们可以更好的掌握k8s和通过kuboard-k8s多集群管理工具来管理多个k8s集群,官网也有关于kuboard的其它安装方式,生产环境肯定是要高可用安装,官网也有文档说明,具体的可以去参看官网的详细文档,本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!
2024-12-28 14:37:18
1149
原创 disruptor-spring-boot-start启动器
Disruptor是一种高性能的并发编程框架,它由LMAX Exchange公司开发,并于2011年开源。Disruptor旨在解决传统多线程编程中的性能瓶颈和并发问题,特别适用于需要高度并发处理的场景。Disruptor采用了一种称为"无锁编程"的机制,通过使用环形缓冲区(Ring Buffer)和事件驱动的方式实现高效的消息传递和处理。它的核心思想是将消息(事件)在生产者和消费者之间进行无锁的、高效的交换,以减少线程间的竞争和上下文切换。
2024-09-27 16:07:22
1474
1
原创 Idea安装VisualGC插件手把手教程
开发阶段实时监测,自己的JVM信息,实时可视化 Hotspot JVM 垃圾回收监控工具, 支持查看本地和远程JVM进程, 支持G1 and ZGC算法。整个界面主要分为四个区域,分别为:Spaces、Graphs、Histogram和JVM浏览器。如果需要不依赖IDEA单独运行, 请移步: VisualGC 3.0 独立运行增强版, 支持JDK 8**停止监控 按钮: **点击后会停止当前JVM进程的GC监控.JVM 浏览器窗口。
2024-09-27 16:04:30
2044
3
原创 springBoot应用使用exe4j与innosetup打包为exe可执行程序手把手教学
由于之前搞了一个windwos的java应用程序使用的部署在windwos10的机器上,需要先安装配置java环境程序包解压如图所示:exitbarrier.vbs的脚本如下:使用这个barrier.vbs调用了barrier.bat的脚本通过执行barrier.bat或着点击barrier.vbs(或快捷方式)或启动一个cmd的命令行窗口,运行脚本启动了一个cmd的命令行窗口,这种启动方式很丑陋,并且很容易被人点了关闭了,所以一点也不方便和友好。
2024-08-27 17:52:41
1624
原创 我的创作纪念日
天行健,君子以自强不息;地势坤,君子以厚德载物”继续深耕技术业务、不断提升自己的各方面的能力,提示:职业规划、创作规划等。“撸起袖子加油干,”
2024-08-27 17:28:06
674
原创 redis-distributed-id-generator-start之id生成器压测的一些思考
省略–参考之前的文章2.新建表3.测试代码 IdCreate实体类 IdCreateMapper类 TestController类4.jemeter压测结果预期 使用jemeter新建一个线程组,线程数设置1000,循环次数100次,然后多执行几次,直达请求100000(10w)次之后,使用mybatisPlus的sql注入器批量插入100000(10w)条数据到id_create表中,没有出现id重复,导致主键冲突而插入失败的情况,10w数据全部入库。
2024-08-20 21:27:32
888
3
原创 mybatisPlus的@TableLogic逻辑删除注解导致联合索引失效的坑
假设一个mysql的一张单表叫student数据量有500w左右,如果没有选择适当的列加索引的话,相关的查询就会全表扫描,使用的是mybatisPlus作为ORM框架,并且在实体上的逻辑删除字段del(0:否,1:是)上加了@TableLogic注解,那么StudentService中的业务查询代码如下所示: 如果在student的name,address两列上建立了联合索引如下: 请问各位看官上面那个StudentServer的this.getOne的查询有没有走index_nam
2024-08-16 15:29:40
1041
原创 集成sms4j修改源码实现发送不带短信模版id的短信
sms4j:让发送短信变得更简单,是一款开源、优雅、开箱即用、切换灵活。功能丰富等特性的发短信的开源好用开源好用的轮子,支持的短信提供商也比较的多,支持的短信提供厂商有:阿里云、容联云、天翼云、亿美软通、华为云短信、京东云短信、 网易云信、腾讯云短信、合一短信、云片短信、助通短信、鼎众短信、联麓短信、七牛云短信 、创蓝短信、极光短信、布丁云V2 、中国移动 云MAS 、百度云短信、螺丝帽短信、SUBMAIL短信、 单米短信;官网上也有详细的说明,本文以华为云短信为例。 由于最近项目需要一个发送短信的功
2024-07-30 17:24:05
1361
原创 集成sa-token前后端分离部署配置corsFliter解决跨域失效的真正原因
缘由请参看下面这篇文章:sa-token前后端分离解决跨域的正确姿势这篇文章虽然经过n多次尝试找到了正确的姿势,但是问题的根本原因没有找到,然后我就经过一些思考和探索,我想这个跨域能不能在本地模拟出来,然后起就去找了项目前端人员老王,然后确实模拟出本地跨域,在项目中将之前sa-token前后端分离解决跨域的正确姿势文章中的SimpleCORSFilter注释之后进行了问题复现。
2024-07-08 20:00:34
1299
2
原创 Lock4j简单的支持不同方案的高性能分布式锁实现及源码解析
lock4j是苞米豆提供的一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求。立志打造一个简单但富有内涵的分布式锁组件。
2024-07-06 18:56:51
1790
原创 sa-token前后端分离解决跨域的正确姿势
由于最近写了一个项目,前端使用vue,后端使用的是Java,集成国产sa-token(一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!sa-token官网提供的解决跨域的方法如下;上面的方式都只可以参考,但是实际上实践下来都失效了,配置了没有用,项目中使用的springBoot版本是:2.3.12.RELEASE,spring版本是5.2.15.RELEASE,这个跨域真是一个蛋疼的问题,网上各种文章看然后各种姿势去尝试,没有一个是可以的,最后经过各种尝试,终于找到了一个可行的姿势。
2024-07-06 18:49:37
3159
14
原创 TIS人人都会用的数据集成产品
TIS集成大数据领域优秀组件(FlinkX-CDC,Chunjun(FlinkX),DataX,Flink等)为您提供一站式、开箱即用的DataOps数据中台,大幅提高ETL实时数仓构建效率。TIS的愿景是实现企业大数据ETL(Extraction-Transformation-Loading)全覆盖的中台产品,数据抽取(Extraction)是大数据处理所有环节中的第一步,也是最重要的环节。,并且在原生DataX之上添加了功能特性大大提高了DataX的可用性。
2024-07-04 13:13:23
1319
原创 Dinky 让Flink作业纵享丝滑
Dinky的部署方式还有很多:二进制可执行包部署,源码编译部署,docker-compose部署,k8s部署等,支持多种flink模式提交任务,使用flink支持整库同步、增量和实时CDC数据同步,还集成DolphinScheduler(小海豚调度平台),支持主流的关系型数据库、OLAP数据库和数据湖产品,还有运维监控功能,可视化管理flink任务,Dink。
2024-07-01 16:32:35
2634
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅