- 博客(93)
- 收藏
- 关注
原创 Maven 多模块项目中“同名类型冲突与 Bean 重名”的排错记录
这也是为什么 IDEA 的“重新构建项目”可能直接解决问题:它会重新处理整个项目的模块输出,而不只是当前启动模块。开发阶段重新构建后能够启动,不代表最终打出的 jar 一定没有旧类。正式打包前,仍建议执行一次 Maven。常见原因是:当前模块代码已经使用新 VO,但 Maven 加载的依赖 jar 仍是旧版本。旧类不一定存在于启动模块中,也可能残留在它依赖的其他模块里。需要注意,“重新构建项目”和 Maven。本文记录完整的判断思路和处理方法。最终发生 Bean 名称冲突。无法清除依赖模块中的旧。
2026-09-10 09:51:44
88
原创 springBoot启动报错:HikariCP “Too many connections“
启动失败的进程异常退出后,其占用的数据库连接不会立即释放。重新构建产生的时间窗口让 MySQL 完成了残留连接的回收,新进程就能正常获取连接。全局连接数和用户级配额均未触发限制。操作:IDE 中执行。,完成后重新启动应用。
2026-09-08 09:47:20
200
原创 数据库并发控制:悲观锁与乐观锁
理解两者的原理和适用场景,根据业务特点合理选择,是保障数据一致性的关键。在核心业务中组合使用两种锁,是工程实践中常见的防御性做法。在多用户并发操作同一条数据的场景下,如果不做控制,可能出现数据被重复修改、状态流转异常等问题。乐观锁假设并发冲突概率较低,不主动加锁,而是在更新时校验数据是否已被其他事务修改。悲观锁假设并发冲突一定会发生,因此在操作数据前先加锁,其他事务必须等待当前事务完成后才能操作。,而非方法返回时释放。因此必须在事务内使用,否则每次查询自动提交,锁会立即释放,等于未加锁。
2026-09-07 16:16:56
280
原创 巧用 Set 去重与复合键:高效统计分组内不重复元素的数量
本文针对列表页统计主单明细种类数的性能问题,提出批量查询+Set去重+复合键+computeIfAbsent分组的方案。通过一次IN查询获取全部明细,用字符串拼接构建复合键,利用Set自动去重统计数量,并回填结果。
2026-09-07 16:13:49
318
原创 Reasonix智能体安装 MySQL 的 MCP 教程以及遇到的问题解决办法<让你的ai直接访问数据库>
你可以把它理解成"AI 的万能插座协议"。AI 智能体本身不会直接连数据库通过 MCP,AI 可以"插上"各种能力插件——比如连 MySQL、操作文件、调用 API装了 MySQL 的 MCP 后,AI 就能直接查数据库了,比如让它看表结构、查数据,省得每次都要你截图或者复制MCP 就像给 AI 装了个"数据库驱动",装好它,AI 就能和数据库对话了。✅ MCP = AI 的数据库驱动,装好后 AI 能直接查库✅ 推荐手动配置(config.toml + .env),不要用自动安装器装这个包。
2026-08-12 10:42:21
402
原创 Java Stream 流中toMap 实战总结
即使从业务逻辑上判断不会重复,也应保留三参数写法以提升代码健壮性。该场景在一对多关联查询中极为常见,可有效解决循环查库的 N+1 性能问题。Stream API 的计算模型分为两类操作,理解该机制有助于排查"流中逻辑未执行"类问题。方法引用是 Lambda 表达式的语法简化,本质是对"接收参数并直接转发调用"场景的缩写。,结合 Stream 与 Optional 可以显式处理"查不到数据"的分支。理解要点:箭头左侧作为参数传入的对象属于谁,就使用谁域下的方法。元素时,该场景适合使用。类名::getXxx。
2026-08-07 11:09:54
336
原创 什么是 PLM 研发物料库 vs 物料主库
PLM 是研发源头,管草稿、改版本、存图纸;物料主库是正式字典,全公司共用,数据是 PLM 发布过来的。数据单向流动:只能 PLM → 主库,不能反过来。发布是两个系统的分界点。主库字段长是故意设计的,静态元数据全塞一张表,性能最好、维护最方便;动态业务单据才单独拆表。
2026-08-05 10:08:56
279
原创 BaseMapper vs BaseMapperPlus:区别与选型
【代码】BaseMapper vs BaseMapperPlus:区别与选型。
2026-08-05 09:52:55
285
原创 Spring @Validated和Validation注解 校验机制完全指南
放置位置校验范围典型场景类上方法参数上直接写的校验注解参数上(无分组)该对象内部所有校验注解全体校验参数上(有分组)该对象内部指定分组的校验只校验新增一句话:类上的管"表面",参数上的管"里面"。就是一个空的标记接口public interface AddGroup {} // 一班public interface EditGroup {} // 二班// 1. 定义注解String message() default "手机号格式不正确";Class<?Class<?
2026-08-03 15:38:30
184
原创 <<VSCode用AI写代码 + IntelliJ IDEA运行服务>> 混用导致 Spring Boot服务老是启动失败的排查与解决
│ │ │ ││ 编译器 │ │ 编译器 ││ │ │ ││ ││ 冲突!│▼ ▼│ (两个编译器写入同一个目录) │配置│ 纯编辑器 │ │ javac ││ 不编译 │ │ 编译器 ││ │ │ ││▼│ (IDEA 独占) │。
2026-08-02 10:11:41
312
原创 MapStruct 自动映射注解 @AutoMapper 详解
在 Java 开发中,对象之间的转换是一个高频操作。前端传参用数据库存储用Entity接口返回用如果手写get/set转换代码,不仅繁琐还容易出错。本文介绍MapStruct的注解,让你告别手动转换。是 MapStruct 的自动映射注解,在编译期自动生成对象转换代码,运行时直接调用,性能接近手写代码。问题答案为什么要用 @AutoMapper?自动生成转换代码,减少手写 get/settarget 属性是什么?指定转换的目标类。
2026-07-30 14:02:13
260
原创 Spring Boot 登录场景下的策略模式优雅实现
策略模式 = 把「每种 if 分支里的逻辑」封装成「独立的策略类」,然后用一个「路由器」在运行时动态选策略。角色作用策略接口定义所有策略必须实现的方法(比如login()具体策略每种 if 分支的逻辑,拆成单独的类(Password/SMS/Social)路由器根据参数,运行时决定调用哪个具体策略项目里的// Bean 名后缀,用于拼 Spring 容器里的 beanName/*** 【路由器方法】static,直接接口调用,不用注入* 这是整个设计最精髓的地方*/
2026-07-30 09:29:52
310
原创 服务有两个配置文件,一个dev一个prod...,怎么配置让他加载指定文件的(实现思路)
Maven Profiles 勾选 dev/prod↓@profiles.active@ 被替换成具体值↓↓Spring Boot 自动加载 application.yml + application-dev.yml(合并,后者覆盖前者)
2026-07-30 09:05:44
165
原创 Windows 下升级 Maven 3.6.1 到 3.9.9 踩坑全记录
│ Windows 环境变量层级 ││ 用户变量(User) ││ ├── 优先级:低 ││ ├── 修改权限:普通用户即可 ││ └── 作用范围:仅当前用户 ││ ││ 系统变量(Machine) ← 优先级更高!││ ├── 优先级:高(覆盖同名用户变量) ││ ├── 修改权限:需要管理员 ││ └── 作用范围:所有用户 │。
2026-07-28 14:48:57
383
原创 RuoYi-Vue-Plus后台管理系统表(详解)
本文将后台管理系统类比为写字楼物业管理,从权限控制到功能模块进行形象化解读。核心包括:1)RBAC权限模型(用户-角色-菜单三级联动);2)组织架构管理(部门/岗位树形结构);3)动态配置系统(字典/参数实现业务解耦);4)文件/日志等基础服务(OSS统一存储、操作日志审计)。通过15个功能模块的类比说明,揭示后台系统如何实现动态权限、数据隔离和灵活配置,其中字典管理和参数配置的设计尤其体现"配置驱动"的开发思想。整体采用模块化设计,各组件既可独立运作又通过权限体系有机串联。
2026-07-28 09:26:55
492
原创 @NotBlank(message = “{xxx}“) 注解中花括号的含义
问题答案是什么?国际化资源文件中的 **消息 key为什么用花括号?JSR-303 规范的语法,告诉框架去解析 key好处是什么?支持多语言、文案统一管理、改文案不用改代码。
2026-07-23 09:06:12
303
原创 Git 分支误操作修复指南 —— 代码写在 master 分支了,其实应该在 dev 分支
相信每个用 Git 的开发者,或多或少都遇到过这个问题。别慌,Git 有多种方案可以完美解决,甚至可以做到。把当前工作区和暂存区的修改"藏"到 Git 的一个临时区域,等需要的时候再取出来。把指定的 commit "复制粘贴" 到当前分支,生成一个新的 commit。代码已经 commit,甚至已经 push 到远程 master 了。开开心心写了一下午代码,Commit 完了,突然发现——已经 commit 了,但还没有 push 到远程。一眼就能看到当前在哪个分支!
2026-07-23 09:02:59
197
原创 主键选择(自增 vs UUID vs 雪花算法)
主键选择并非简单的技术偏好问题,而是需要综合考量系统架构、数据规模、性能要求和运维成本的技术决策。自增 ID适合简单场景,实现成本低,但扩展性有限UUID适合强一致性要求低的分布式场景,但需承受性能损耗雪花算法在分布式高并发场景下表现优异,但需妥善处理时钟同步和机器ID分配在实际项目中,建议优先评估系统的长期演进方向。若存在分布式扩展的可能性,应尽早采用雪花算法等分布式ID方案,避免后期数据迁移和架构改造的高昂成本。
2026-07-21 15:51:55
342
原创 数据加密场景及实操
明文密码 → 加密算法 → 加密字符串(不可逆)✅ 加密后无法还原成原始密码✅ 每次加密同一个密码,结果都不一样(加盐机制)✅ 验证时:用同样的算法加密用户输入,和数据库中的加密值对比加密:明文 + 密钥 → 密文解密:密文 + 同样的密钥 → 明文✅ 可逆(需要时能还原原始数据)✅ 速度快,适合加密大量数据❌ 密钥要妥善保管(泄露了就全完了)✅ 同一个密钥加密同一个数据,结果相同即使是有数据权限的用户,也不应该看到完整的敏感信息。在页面展示时,对敏感字段进行部分隐藏处理。
2026-07-21 14:02:28
177
原创 TCP/MQTT/HTTP/UDP/HTTPS 全解析
特点说明✅ 简单易用前端框架(Axios)、后端(Spring MVC)都有成熟支持✅ 无状态每次请求独立,不依赖之前的请求✅ 标准化请求格式、响应格式有统一规范❌ 开销较大每个请求都有 HTTP 头信息❌ 不适合推送服务器不能主动发消息给客户端(需要 WebSocket/SSE)协议特点你的关注点HTTP请求-响应,简单✅ 每天都要用,Controller 就是写这个HTTPSHTTP + 加密✅ 部署时配置 Nginx,代码不用改MQTT发布-订阅,轻量。
2026-07-21 13:37:08
480
原创 什么是OA与MES系统?
OA(Office Automation,办公自动化)系统就是企业内部的"管理网站",员工日常办公都在用它。功能模块说明示例员工管理员工信息、部门架构、入职离职张三是研发部的考勤打卡上下班打卡、请假、出差张三今天请病假审批流程报销审批、采购审批张三的报销单需要经理审批公告通知公司发文、通知端午节放假通知日程管理会议预约、工作日程周五下午3点开评审会OA 系统(公司人事数据)││ 数据同步↓工具柜系统(你们开发的)│└─ 员工登录:用 OA 的账号体系。
2026-07-21 13:30:28
203
原创 MQTT 从入门到实战:Java 开发者必备(详解)
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息协议,专为低带宽、不稳定网络环境下的设备通信设计。
2026-07-20 17:12:47
592
原创 @ExcelIgnoreUnannotated 和 @AutoMapper 详解
注解作用使用场景效果控制 Excel 导出导出报表、下载数据只导出明确标记的字段控制对象转换实体类 ↔ Vo 类转换自动生成属性复制代码。
2026-07-20 10:35:33
204
原创 你知道为什么每个实体类都有@Serial private static final long serialVersionUID = 1L;吗?
摘要: serialVersionUID是Java类的序列化版本标识符,用于确保反序列化时类的版本一致性。@Serial注解(Java9+)标记序列化字段,增强编译检查和可读性。公司代码中普遍添加serialVersionUID以支持分布式传输或缓存存储。若类结构变更但不修改serialVersionUID,反序列化时新增字段为默认值;若修改则直接报错。final修饰的serialVersionUID禁止运行时修改,但允许直接修改代码文件后重新编译。实际开发中应按需调整版本号,确保兼容性。
2026-07-20 10:03:21
396
原创 Lombok的@EqualsAndHashCode注解含义
Lombok的@EqualsAndHashCode注解用于自动生成equals()和hashCode()方法。当设置callSuper=true时,比较对象会包含父类字段(如示例中的id和name);默认callSuper=false则仅比较当前类字段(如email)。通过该注解可灵活控制对象比较范围,确保equals和hashCode方法逻辑一致性。 (98字)
2026-07-20 09:10:30
208
原创 Java接受数据时<常用注解>以及进阶
本文摘要: 文章系统介绍了Spring MVC中常见请求参数注解的进阶用法,包括@RequestParam、@RequestBody、@RequestPart、@PathVariable、@ModelAttribute、@RequestHeader和@CookieValue。详细说明了各注解的核心参数(如name/value、required、defaultValue)及其应用场景,例如处理数组/集合参数、文件上传、路径变量绑定、请求头获取等,并提供了典型代码示例。通过参数配置组合,开发者可灵活应对必填校验
2026-07-17 14:02:58
355
原创 旧版本升级到IDEA 2024.3.7.1
职场开发者常因担心兼容性问题而不敢升级IDEA。本文提出零风险双版本并行方案:保留旧版同时全新安装新版,配置自动迁移但目录独立,确保随时可回退。实测2024.3.7.1版本稳定性最佳,比2026新版更适合作业环境。关键步骤包括:官方下载旗舰版、修改安装路径、首次启动迁移配置、测试项目兼容性。建议预留磁盘空间,采用渐进式升级策略,优先选择小版本迭代。强调职场开发"稳定优先"原则,双版本方案既可体验新功能又能确保开发连续性。(149字)
2026-07-16 11:16:18
785
原创 拉取 Java 项目三大常见报错及解决办法
在日常开发中,从 Git 拉取同事或开源的 Java 项目后,经常会在导入 IDEA 时遇到各种“奇葩”报错。很多新手遇到代码满屏爆红、依赖下载卡死,往往无从下手。其实,大部分问题都出在本地环境与项目配置不匹配上。本文总结了拉取项目后最常见的三大报错及对应的解决办法,帮你快速排雷,顺利跑通项目!卡加载-> 查镜像配置,删缓存。爆红/版本报错-> 查 Project Structure,统一 JDK 版本,执行 Clean。缺包-> 确认是否为内部依赖,找同事要私服地址并配置。
2026-07-16 08:49:31
376
原创 RuoYi-Vue-Plus 学习笔记(注解篇)
本文介绍了基于SpringBoot3.5+Vue3的企业级框架RuoYi-Vue-Plus的核心功能模块和设计特点。重点解析了用户管理模块的Controller层设计,包括权限控制(@SaCheckPermission)、参数校验(@Validated)、数据权限(@DataPermission)、操作日志(@Log)和防重复提交(@RepeatSubmit)等关键注解的使用方法。详细说明了权限体系设计规范、Mapper层的数据权限实现以及分组校验机制。该框架采用模块化设计,包含主启动模块、公共组件、业务模
2026-07-15 19:02:49
231
原创 maven执行clean操作后,install操作失败,项目也无法正常启动解决方法,项目也不能正常打包
摘要:项目启动问题是由于JDK版本不一致导致的。原项目使用JDK11,通过将所有配置修改为JDK1.8或8版本,并刷新Maven后,问题得到解决。该解决方案简单有效,适用于类似版本冲突情况。
2026-03-04 17:33:29
117
原创 一篇搞懂 Linux、Ubuntu、麒麟 到底是什么关系
日常做服务部署时,经常会被问到:Linux 是什么?Ubuntu、麒麟、Red Hat 又有什么区别?这篇就用清晰、直白的方式,把核心概念一次性讲透。
2026-02-27 11:47:17
1689
原创 Elasticsearch 中批量更新文档(Update By Query)的标准写法
/ ... 中间根据 ADD/REMOVE 选择脚本准备参数params。意义:把 Java 里的变量(groupId)包装成 Map,准备传给 ES。这样做的目的是为了防止字符串拼接错误,也方便 ES 做安全检查。定义脚本。意义“改成什么样?。这是批量更新的灵魂。逻辑:把刚才的参数、脚本语言(Painless)、以及具体的修改代码(那个长字符串)组装在一起。注意:这里根据operateTag判断是执行“添加 ID”还是“删除 ID”的逻辑。
2026-02-03 21:16:50
214
原创 Docker 部署 Kibana:查 ES 版本 + 版本匹配 + 中文界面
若无法直接访问 ES,可询问团队运维 / 后端同事,或查看公司内部技术文档(如部署手册、接口文档)。即为 ES 版本号。
2026-02-03 15:16:56
591
原创 ES 脚本核心语法:ctx._source [‘group_id‘]
既然我在脚本里,为什么不能直接写。),请把你的‘原始数据盒子’(的那张纸条,把新的值(,它是你进入当前文档的。
2026-02-02 16:22:07
615
原创 Elasticsearch (ES) 核心笔记
ES 是存 JSON 的,一个索引只存一种卡。为了改数据不丢,逻辑发给 ES 自己跑(Script),ctx代表卡,params传参数。
2026-02-02 13:56:29
340
原创 Docker开发笔记(详解)
跨机器(Windows ↔ 虚拟机)永远不冲突!“在我电脑能跑,你电脑跑不了” →。虚拟机IP:3306。虚拟机IP:3307。
2026-01-31 13:53:35
617
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅