自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 use double register to resolve “No provider available“ issue#1907

    由于之前写了好几篇dubbo的文章跟这个问题有很大的关系,那几篇文章写的还是一头雾水云里雾里,直到有一天一个同事问我说,他有个dubbo服务的生产者重启启动之后消费者发现不了生产者的服务,后面我把他那个项目拉下来看了下,后面又想了下之前写的那三篇文章,然后去看了下之前相关的issue,最后在之前的issue里面翻到了这个issue,然后去把之前的那些都重新想了一遍,把相关的源码都全部翻了一遍,然后串了下,后面恍然大悟,之前那几篇文章没有找到根本原因,本篇文章来做一个了结。2.issue地址#1

2026-07-12 21:35:46 372

原创 DBSyncer一款开源的数据同步中间件分享

DBSyncer是一款开源数据同步中间件,支持MySQL、Oracle等多种数据源的同步,提供插件扩展和监控功能。项目提供详细的Docker部署教程,支持Linux/Windows环境。其亮点包括清晰的代码结构、插件化设计和持续迭代维护,但存在单机运行、文件存储等局限性,适合简单业务场景。源码设计值得学习,可作为轻量级数据同步方案的备选。项目地址:Gitee/Github均已开源。

2026-07-12 21:13:52 248

原创 Streampark最新v2.1.7Release版本源码本地构建debug运行手把手教学

本文详细介绍了Apache StreamPark v2.1.7版本的本地编译运行过程。主要内容包括:从官网下载源码包,配置JDK和Maven环境,修改build.sh文件添加-Drat.skip=true参数跳过许可证检查,执行后端编译命令并选择分离打包模式。前端部分需安装Node.js 17.9.1版本,配置阿里镜像源后执行npm命令编译运行。最后访问http://localhost:10001/,使用默认账号admin/streampark登录。文章还提示了调试时需注意的临时目录创建、H2数据库使用等细

2026-05-15 18:23:01 433

原创 缓存一致性终极解决方案之Facebook租约机制的开源实现集成改造

本文介绍了缓存一致性问题的解决方案,重点分析了两个开源项目(system-design-codebase和surfing-facebook-cache)的实现思路,并提出了基于Redisson的集成改造方案。作者将方案整合到自研项目biz-ratelimiter-redissonlock中,通过优化RocksCacheClient客户端管理、支持多种序列化方式、利用Redisson高级功能等改进,提升了缓存一致性的处理效率和灵活性。文章包含详细的项目依赖配置和使用教程,展示了如何通过注解方式快速集成组件,并

2026-04-16 21:22:29 501

原创 人工智障~差点翻车

《AI编程的风险与反思》摘要:作者分享了一段因盲目采纳AI代码优化建议导致多线程污染问题的经历,通过分析源码发现是全局单例对象引发的问题。文章指出当前AI技术在处理特定行业需求(如电子发票生成)时仍存在局限,生成的代码常出现错误。作者强调AI本质是概率模型,存在"幻觉"风险,只能辅助基础编程,无法解决复杂问题。提醒开发者需保持批判思维,过度依赖AI可能导致技术能力退化,工具的正确使用仍需人类智慧把关。

2026-04-16 21:18:57 54

原创 整数ID与短字符串互转思路及开源实现分享

IdConverterUtil是一个基于Base62编码的Java工具类,实现了长整数ID与短字符串之间的相互转换。它通过加权求和将数字映射到自定义字符集(包含数字、大小写字母),支持固定长度编码和填充功能。主要方法包括encode()将数字转为字符串、decode()反向转换、encodeFixed()生成固定长度字符串等。该工具类适用于需要缩短ID长度的场景,如生成短链接或简化显示。

2026-02-02 21:52:03 1140

原创 自定义注解记录接口切面log日志入库优化

本文针对业务接口日志记录系统的优化方案进行了详细阐述。针对原系统存在的日志信息不完整、存储占用过多、同步入库性能差等问题,提出三大优化方向:1)将MySQL字段类型从TEXT升级为MEDIUMTEXT/LONGTEXT或JSON类型以解决截断问题;2)精简存储内容,避免无意义数据占用空间;3)将同步日志入库改为异步处理。文章通过SQL实验验证了不同文本类型的存储特性,并深入解析了字符编码原理(Unicode码点、编码转换规则等),强调合理选择存储方案对系统性能的重要性。最终提出保持单条日志16KB以内的优化

2026-02-02 21:42:08 612

原创 新版chrome浏览器安全限制及解决办法

本文介绍了Chrome浏览器跨域访问的配置方法。新版Chrome移除了旧版中的block-insecure-private-network-requests设置选项,建议通过添加启动参数--disable-web-security --user-data-dir来实现跨域访问。同时针对新版的安全网络限制,可通过设置chrome://flags#local-network-access-check为Disabled或添加--enable-features=PrivateNetworkAccessRespect

2026-01-14 17:42:21 2943

原创 Java应用诊断利器Arthas之容器环境的正确姿势

Arthas是阿里开源的Java诊断工具,支持在线监控诊断JVM应用,无需修改代码或重启服务。本文介绍了在Docker容器中使用Arthas的解决方案,针对Attach进程报错问题提供了三种解决方法,并给出了包含Arthas的Dockerfile示例。文章还分享了常用Docker和K8s操作命令,以及Arthas的诊断优势,帮助开发者高效解决线上Java应用的疑难问题。

2026-01-09 12:57:47 1157

原创 集成sa-token跨域正确姿势

    由于之前项目上集成使用了sa-token,项目使用前后端分离部署,前端vue项目部署在阿里云的oos上,之前是解决了跨域的问题,后面我本机浏览器升级之后访问测试环境的项目地址还是跨域了(之前配置浏览器解决跨域的浏览器配置在新版本的chrom上都找不到了),后面又去看了下,然后试了下测试环境可以使用https://域名/路径/首页 可以访问到,http://域名/路径/首页这种方式访问不了(这种方式在页面的接口上是http://ip:port/接口路径【如果改成https://ip:port/接口路径

2026-01-09 12:54:51 946 2

原创 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 1389

原创 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 292

原创 RabbitMq消费延迟衰减重试实现思路

本文介绍了基于RabbitMQ的延迟消息实现方案。主要内容包括: 定义了通用的MQ消息基类MqMsgDto,包含延迟等级和消息体字段; 设计了20级延迟时间枚举DelayTimeLevelEnum,从1秒到48小时不等,参考了RocketMQ的延迟等级设计; 展示了消费者实现示例,支持自动衰减重试,超过最大重试次数后停止重发; 分析了RabbitMQ的三大超时限制:消息TTL上限约49.7天,消费者ACK超时默认30分钟可配置,客户端连接超时默认60秒。 该方案通过延迟等级+衰减重试机制,实现了灵活的消息延

2025-11-13 20:53:25 827

原创 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 1000 2

原创 手写好用异步工具类

ZlfLatchUtils是一个基于CountDownLatch的并发任务执行工具类,主要功能包括: 提供单例线程池管理,支持自定义拒绝策略 支持提交Runnable和Callable两种任务类型 实现两种任务执行模式: waitFor():无返回值的并行任务执行 waitForResult():带有返回值的并行任务执行 使用ThreadLocal存储任务信息,确保线程安全 支持超时控制,通过CountDownLatch同步任务执行状态 提供异常处理和日志记录能力 该工具类适用于需要并行执行多个任务并等待所

2025-11-13 20:45:36 153

原创 字符和字节

摘要: 本文澄清了中文字符的计算问题: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 2252

原创 XXL-JOB-Admin后台手动执行任务传参过长被截断问题解决

本文针对XXL-JOB定时任务参数过长被截断的问题,提出两种解决方案:一是将参数拆分为较短部分分批执行;二是通过HTTP工具直接调用任务触发接口。重点介绍了第二种方法,包括如何获取接口URL、cookie参数和addressList地址,并通过Postman等工具发送form-data格式请求。该方法绕过了前端参数长度限制,解决了长参数执行失败的问题。文章通过分析XXL-JOB源码,结合实际操作截图,为开发者提供了有效的技术参考。

2025-09-14 12:39:21 1140 1

原创 BigDecimal账户分布式原子操作

在微服务分布式大行其道的今天,在mysql数据库频繁使用的今天,假设让你设计一个账户系统,账户充值扣款消费退款等相关的需求,还是使用传统的mysql数据库的表来实现吗?

2025-08-31 21:41:15 860

原创 XXL-JOB任务执行The access token is wrong问题分析解决及原理源码解析

希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

2025-08-31 21:37:19 1485

原创 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 960

原创 两个时间比较方法理解及使用会遇到的大坑

本文总结了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 1134

原创 windows10下安装docker且使用wsl2安装双系统并构建最小jre镜像和应用镜像

由于几年前我刚开始接触docker这个东西就觉得是挺神奇挺好用挺奈斯的一个创造性产品,它的思想是:“以此构建,到处运行”,真的是很方便,给开发和运维带来了很大的便利性,同时也是极大地简化部署难度,同时也带来了很大的效率提升,屏蔽了部署环境的差异引发的开发、运维之间的相互吐槽和刷锅行为,提升团队迭代开发效率,同时让生产效率也大大提高了,俗话说:”兴趣是最好的老师”,所以作者就开始了docker的学习实践之路,我相信云原生是未来软件架构的方向和标配,也是大势所趋。...

2025-05-03 22:12:08 2827 8

原创 乐企数电发票分布式发票号码生成重复的问题修复思路分享

由于之前接了乐企数电开票,服务上线之后,使用的公司少没有啥问题,后面切换了两家日开票量大的公司上线之后,就发现发票号码生成重复了,后面下班紧急修复了,修复到凌晨3点发了一个版本上去,之后才没有重复的,这次其实是歪打正着的搞好了,后面我思考分析了下之后重新优化了之后上了几个版本后观察,使用数据库表的方式还是会有一定的概率会重复,之前歪打正着是因为使用了@Transactional注解,事务传播级别设置为READ_COMMITTED,后面揭晓为啥是歪打正着。

2025-04-27 21:48:56 1575

原创 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 543

原创 spring-rabbit的CachingConnectionFactory默认参数导致消费者Channel数量暴增问题解决

由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百,最多的要干到900多个了,于是乎我就去看了下之前我写的组件的源码,然后去查了下CacheMode的两种模式及相关的参数设置,最终找到了这个是由于一下参数没有设置导致的:RabbitProperties类中的静态内部类Channel中的size和checkoutTimeout没有设置/**/**

2025-04-27 21:39:04 956

原创 rabbitmq-spring-boot-start版本优化升级

由于之前手写了一个好用的rabbitmq-spring-boot-start启动器,虽然实现了相关的功能,但是还有一点小问题,这个也是最近在项目中使用我写的这个组件发现的一个问题,所以修复升级了,maven依赖已经退推送到中央仓库上了,只需要引入依赖,然后简单的配置就可以实现发消息了,使用上会有一点需要注意的,请听下文分解。

2025-04-23 18:05:26 1346

原创 disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明

好看的皮囊千篇一律,有趣的代码万里挑一啊,有句名言说得好:实践是检验真理的唯一标准!本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

2025-04-23 18:01:54 304 2

原创 使用shell脚本批量curl调用POST接口

这篇文章是使用shell脚本批量调用GET接口的方式,后面项目中需要手动去触发调用接口重新生成数据,由于上线之后有问题的数据比较多,所以一条一条的去触发就不得行了,数据多了,手动一条去处理,就相当于人肉手动方式,效率低,也容易出错,如果使用shell来批量调用岂不是美哉,废话多不多说,直接上code。

2025-04-22 17:38:15 446

原创 接口对外安全交互新姿势

    由于这久做了一个乐企数电开票的项目,已经上线了,真的是一言难尽,再回首已经是轻舟已过万重山,接口通过外网暴露给业务方使用,由于业务方的服务是在阿里云上,我的这个服务是在华为云上,所以k8s上的服务只能通过service对外暴露出去给阿里云上的业务侧使用,所以我就有了下面的这个思路,使用ip白名单和sm2对请求body的做解密,响应做加密,只需要把秘钥和加密工具类对给业务侧就可以安全的调用接口,其实在华为云上可以在负载均衡器上配置白名单,只允许阿里云上那几台服务器的ip访问,所以在项目中就不用加这个i

2025-03-12 13:21:13 1291

原创 windwos上jps既不是内部命令也不是外部命令解决方法

1.首先查看java安装位置。2.配置系统环境变量。

2025-03-12 13:16:58 326

原创 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 1774

原创 自定义注解使用AspectJ切面和SpringBoot的Even事件优雅记录业务接口及第三方接口调用日志实现思路

在日常的开发中经常会遇到对接第三方系统,如:各种支付(微信支付、支付宝支付。

2025-01-14 21:58:49 811 1

原创 自定义注解之AspectJ切面动态代理使用注意事项

Slf4j@Aspect@Component//切面表达式写法还有很多种//之前逻辑try {//异常逻辑//之后逻辑通过这点东西,后面会写一篇文章分享,如何优雅自定义注解使用AspectJ切面及SpingBoot的Event机制记录业务接口调用日志及第三方接口调用日志,这个思路实现之后对于后期排查问题是非常的方便,本次分享到此结束,希望我的分享对你有所帮助,请一键三连,么么么哒!

2025-01-14 21:52:59 407

原创 SpringBoot项目分离与分层方式之容器化部署

SpringBoot项目分离与分层方式之容器化部署  之前也分享过分离与分层方式部署,本文只不过将之前的那两种方式放到了容器中来部署运行,里面多多少少还是有点坑在里面的,要相对简单一点直接使用如下命令部署:  使用容器部署方式就比这种更高级优雅一点,根据个人喜好去选择适合自己的部署方式。  之前的文章链接如下:2.deom项目工程结构  这里只展示build的配置3.2子模块3的Dockerfile  容器中工作路径下有app.jar、config。resources这几项.  子模块3打包之后

2025-01-10 01:40:11 1081

原创 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 1207

原创 之前手写的两个好用开源组件优化升级

这两个手写开源好用的组件是在日常项目实践中发现了一些问题,后面优化了迭代了,依赖包都推送到maven中央仓库上了,项目中直接引入对应的maven依赖包安装教程配置一下,就可以方便轻松快捷的使用我给大家提供的开源组件了,解决对应的业务问题还是一把利器的,简化代码,纵享丝滑,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

2025-01-10 01:31:50 651

原创 Mysql深度分页之MyBatisPlus百万数据分页优化新姿势

前段时间,我司会员表有600多w数据分页查询特别的慢,于是乎我去explain了一下分页查询的sql是由于没有走索引,导致全表扫描,查询特别的慢,由于会员表有一个逻辑删除的字段,所以查询的时候sql条件会默认第一条件就是逻辑删除的字段,这个之前的文章也有分享过这个逻辑删除字段在查询第一个导致索引失效的坑,于是乎在之前加的索引上把逻辑删除字段加在索引第一列之后,分页查询sql就走了索引,没有之前那么慢;

2024-12-28 18:19:41 1821 1

原创 Docker安装体验kuboard-k8s多集群管理工具

本次分享介绍了通过docker的方式快速部署安装kuboard-k8s多集群管理工具体验,它的官网上的文档非常的详细,还有一些关于k8s知识的分享,让我们可以更好的掌握k8s和通过kuboard-k8s多集群管理工具来管理多个k8s集群,官网也有关于kuboard的其它安装方式,生产环境肯定是要高可用安装,官网也有文档说明,具体的可以去参看官网的详细文档,本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

2024-12-28 14:37:18 1298

原创 disruptor-spring-boot-start启动器

Disruptor是一种高性能的并发编程框架,它由LMAX Exchange公司开发,并于2011年开源。Disruptor旨在解决传统多线程编程中的性能瓶颈和并发问题,特别适用于需要高度并发处理的场景。Disruptor采用了一种称为"无锁编程"的机制,通过使用环形缓冲区(Ring Buffer)和事件驱动的方式实现高效的消息传递和处理。它的核心思想是将消息(事件)在生产者和消费者之间进行无锁的、高效的交换,以减少线程间的竞争和上下文切换。

2024-09-27 16:07:22 1542 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 2233 3

空空如也

空空如也

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

TA关注的人

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