惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
WordPress大学
WordPress大学
Help Net Security
Help Net Security
Jina AI
Jina AI
Security Latest
Security Latest
Y
Y Combinator Blog
Project Zero
Project Zero
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
博客园 - 司徒正美
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
D
Docker
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
C
CERT Recently Published Vulnerability Notes
B
Blog
L
LangChain Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
The Hacker News
The Hacker News
C
Check Point Blog
L
Lohrmann on Cybersecurity
V2EX - 技术
V2EX - 技术
S
Securelist
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
TaoSecurity Blog
TaoSecurity Blog
云风的 BLOG
云风的 BLOG
Latest news
Latest news
人人都是产品经理
人人都是产品经理
L
LINUX DO - 最新话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
Webroot Blog
Webroot Blog
Simon Willison's Weblog
Simon Willison's Weblog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
小众软件
小众软件
T
Tailwind CSS Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
O
OpenAI News

Java

happens-before 详解 - V2EX 华为的毕昇 JDK 8 AppCDS 特性稳定吗? - V2EX 我把 Java 开发的 kkRepo 支持 AOT 编译, 1s 极速启动,空闲内存小于 200MB - V2EX fastjson1.x 最新版本疑似又出 RCE 漏洞了 - V2EX 讲讲我怎么获得 kkRepo 的首个企业用户,成功替换掉 Nexus,每年节省 $1,620 PRO 订阅费用 - V2EX Sonatype 正引入 Maven Central 仓库发布使用情况可见性和针对高流量发布活动的限制 - V2EX 让 Java 再次伟大,没有人比我更懂得如何打包!(分享一个四两拨千斤的多 jar 打包 exe 方式) - V2EX 使用 kkRepo 搭建 Maven 私服 - V2EX Nexus 的平替 neuxs-plus 开源涉嫌商标侵权,被迫改名 kkRepo - V2EX 我在 IDEA tab 里养了一只猫 - V2EX Java 确实是内存高效的 用 AI 把 visualvm 的部分功能界面换了个马甲 - V2EX javaer 现在出去面试 问哪些内容 sa-token + spring cloud gateway 过滤器顺序问题 - V2EX 关于在 wsl 中使用 idea 进行 Java 开发的问题 - V2EX 求助, Fortify 漏扫问题解决 - V2EX 微信 ClawBot 和企微 AIBot 的 Java SDK - V2EX 老业务信创重构选型大家有啥建议 - V2EX ai 编程的情况在你们使用什么 IDE - V2EX 下面这段 Java 多态的代码,如何才能改为 Go、 Python 、JS、C++版本? - V2EX JDK 26 发布,非 lts 版本 - V2EX DoytoQuery vs SpringDataJPA - V2EX 求推荐比较优秀的 springboot 脚手架项目 - V2EX vscode 里自用 Java 开发插件:支持复制引用路径、rest 接口路径、Arthas 命令等功能 - V2EX 自荐 Java 多线程神器——ThreadForge ,让多线程从此简单 - V2EX 屎山老项目想用 ai 实现自动化测试,有什么可落地的方案么 - V2EX WebFlux 项目 被访问后 访问方关闭连接 无法捕获 SocketException: Connection reset - V2EX 关于商用 jdk 收费的问题,有遥测吗? - V2EX IDEA 在 macOS 上卡住 - V2EX Java : 2026 年 SpringBoot, Quarkus, Solon ? - V2EX 佬们有没有比较好的 Java 脚手架 - V2EX 一个对比 JavaORM 框架的小仓库 - V2EX 想问一个关于 IO 流的细节 - V2EX 关于我在腾讯云 windows 服务器起了一个后端服务,但是服务器本地都请求不到的问题 11 - V2EX 分享一个 idea 的无响应 bug,如果你也遇到 - V2EX JNI 是否有向"简洁"演化的可能? - V2EX 多实例 springboot 微服务重启时 Counter 类型指标重置问题 - V2EX 讨论个问题:该不该重写 equal 和 hashcode - V2EX 求助 泛型转换碰到一个很奇怪的问题 Object 放 Redis 自动变成 JSONObject 了 - V2EX Java Agent 该怎么快速学习?有教程文档推一下吗? - V2EX 能不能别用那烦人的 MyBatis-Plus 了! - V2EX 作为 Java boy 你们业余时间会学点什么? - V2EX 各位 v 友们!有无无敌好用的剪辑软件求推荐! - V2EX 如何从反射的 Field/Method 动态构造 mybatis 的 SFunction? - V2EX Java 得冗余与啰嗦是不是对 AI 不友好 - V2EX 问一个日志不打印栈信息的问题 - V2EX 为何 RestTemplate 无法定制请求 - V2EX 日经吐槽:现在的 Java 语言真的有点令人恶心 - V2EX 新手 javaer 咨询几个问题 - V2EX 自学 Java 看不懂报错信息和代码,有什么推荐 ai 拿来自学的吗? - V2EX 用 netty 编写代理服务器,切换出口 IP,不能及时生效 - V2EX mysql 慢日志分析排查小工具 1.0.0 - V2EX Preferences.userNodeForPackage(Object.class)存储位置在哪里? - V2EX vscode 中 augment code 怎么使用 mcp - V2EX mysql 慢日志分析排查小工具 - V2EX Java 的一次编译到处运行在目前还有优势吗 - V2EX 现在学 Java 算 49 年入国军吗 - V2EX 推广一下自己刚撸的 IDEA 插件—Bean Copy 助手 - V2EX 几千万的数据量,层级权限下的列表展示页查询应该怎么设计? - V2EX 大家生产环境会一直开着 JFR 吗 - V2EX 有没有新版 Java 的佬(jdk25 和 21 这种), 上手还是走官方文档吗 - V2EX Java 程序员面经怎么准备 - V2EX
有人用 RUOYI 框架吗? - V2EX
lowman · 2026-02-04 · via Java
spritecn

16

spritecn      2 月 5 日

# 数据库层改进方案 (MyBatis-Plus 升级)

## 1. 框架引入与集成 (MyBatis-Plus)
- [x] **依赖升级**:引入 `mybatis-plus-boot-starter` 3.5.3.1 ,兼容现有 SpringBoot 版本。
- [x] **配置迁移**:将原 `mybatis` 配置节点平移至 `mybatis-plus`。
- [x] **插件配置**:新增 `MybatisPlusConfig`,集成分页插件 (`PaginationInnerInterceptor`)、乐观锁及防全表更新插件。
- [x] **自动填充**:实现 `MetaObjectHandler`,支持 `createTime`、`updateTime` 等基础字段的自动化维护。
- [x] **渐进式兼容**:保留原有 XML 映射机制,支持 `BaseMapper` 与自定义 XML SQL 混用。

## 2. 主键标准化 (统一 ID 方案)
- [ ] **数据库重构**:编写 SQL 脚本,将所有业务表的主键字段名统一修改为 `id` (例如 `user_id` -> `id`)。
- [x] **Java 层双主键映射**:
- [ ] 在 Domain 类中新增 `id` 字段并标记为 `@TableId`。
- [ ] 保留旧字段 (如 `userId`) 并标记为 `@TableField(exist = false)`。
- [ ] 实现双向联动 Setter ,确保新旧代码逻辑无感切换。
- [ ] **XML 映射更新**:批量修改 `resultMap` 中的 `<id>` 标签,将其指向新的数据库 `id` 列。
- [ ] **前端解耦**:逐步将前端表格与 JS 中的 `row.userId` 引用切换为通用的 `row.id`。

## 3. 删除标记标准化 (逻辑删除)
- [ ] **逻辑删除方案演进 (规划中)**:
- [ ] **字段更名**:将 `del_flag` 统一更名为 `deleted`。
- [ ] **类型切换**:由 `String (char/varchar)` 切换为 `Boolean (bit)`。
- [ ] **值规范化**:放弃 `0/2` 逻辑,统一使用 `0 (false/正常)` 和 `1 (true/已删除)`。
- [ ] **全局配置调整**:待数据库调整后,更新 `application.yml` 中的 `logic-delete-field` 及对应 value 。
- [ ] **实体类同步**:批量将 Domain 实体中的 `delFlag` (String) 重构为 `deleted` (Boolean),并标注 `@TableLogic`。
- [ ] **历史 SQL 适配**:清理 XML 中手动拼写的 `del_flag = '0'` 硬编码条件。

## 4. 字段语义清晰化与命名规范化(规划中)
- [ ] **命名统一**:对表名、字段名进行语义化重命名,避免缩写/歧义命名,提升可读性与跨团队理解一致性。
- [ ] **类型对齐**:将枚举/状态位字段尽量收敛为 `Boolean` 或明确的枚举值,减少魔法值(如 `0/1/2`)的传播。
- [ ] **示例**:
- [ ] 岗位:`sys_post` / `post*` 命名调整为 `sys_position` / `position*`( post 在业务语境中歧义较大)。
- [ ] 用户状态:`status`(`0=正常,1=停用`)调整为 `disabled`( Boolean ),使字段含义更直接:`false=启用`,`true=停用`。
- [ ] 各表 type/flag 歧义及魔术值 Boolean/Enum 化

## 5. 时间类型统一(规划中)
- [ ] **类型规范**:
- [ ] 业务字段表示“日期 + 时间”的,统一使用 `LocalDateTime`(如创建/更新/登录/过期时间点等)。
- [ ] 业务字段仅表示“日期”的,统一使用 `LocalDate`(如生日、到期日、结算日等)。
- [ ] **命名规范**:
- [ ] 时间点字段统一使用 `xxxTime` 风格。
- [ ] 示例:`createTime` / `updateTime`
- [ ] 纯日期字段统一使用 `xxxDate` 风格。
- [ ] 示例:`birthDate`、`expireDate`

## 4. 数据统一性方向
- [ ] **去 Join 化重构**:针对性能敏感接口,将原有复杂的联表查询拆分为“多次单表查询 + Service 层聚合”。
- [ ] **主键策略统一**:全量应用分布式 ID (Snowflake) 策略,提升跨库/拆库扩展性。
- [ ] **统一字符类型及排序规则** 统一使用 utf8mb4/utf8mb4_general_ci

# 模块层次优化(完成)
- [x] **目标**:降低包路径层级,提高可发现性;将 `project/**/子模块/分层目录` 收敛为 `project/**/按层目录`,减少写代码时反复切换目录的成本。
- [x] **组织原则**:以“技术分层”作为第一层目录;业务模块通过类名前缀/命名约定区分(避免再次按模块建子目录)。

# 框架选型优化
## 1. 运行基座与基础设施
- [x] **Java 运行时**:最低要求升至 Java 11 (推荐 17 LTS ),彻底弃用 Java 8 兼容代码。
- [ ] **构建增强**:优化 Maven 配置,统一管理版本号,清理冗余依赖。

## 2. 核心架构组件替换
- [ ] **权限安全**:由 Shiro 迁移至 `Sa-Token`(实现更轻量、响应式的权限控制)。
- [ ] **数据缓存**:由 Ehcache 迁移至 `Caffeine`(单机本地缓存的最优选)。
- [ ] **字典缓存组件化**:引入 `DictCache`(`@Bean("dict")`)作为模板层唯一入口
- 使用启动时全量预热字典数据,字典增删改在事务提交后触发刷新/重建方案,确保模板查询不直连数据库且不依赖 miss 回源。
- [ ] **数据层增强**:深度集成 `MyBatis-Plus`,标准化逻辑删除与自动填充逻辑。

## 3. 开发工具与工程化
- [ ] **代码简化**:全面引入 `Lombok`,通过注解消除 POJO 中的样板代码。
- [ ] **JSON 栈统一**:彻底移除 `Fastjson`,全量使用 `Jackson` 并建立全局统一序列化规范。
- [ ] **工具库稳固**:引入 `Guava` 作为核心基础工具库,确立“Guava + Spring Utils”的优先使用准则。
- [ ] **接口文档( Knife4j )**:引入 Knife4j (基于 OpenAPI 3 ),统一接口分组/鉴权示例/错误码展示,确保“启动即能看文档、复制即能调接口”。
- [ ] **测试用例样板**:提供最小可运行测试模板( JUnit5 + SpringBootTest ),覆盖 Controller/Service/Mapper 三类示例,并固化到 `test` 模块/目录,保证新人可照抄扩展。

## 4. 统一异常处理与日志完善
- [ ] **统一异常拦截**:引入 `@RestControllerAdvice` + `@ExceptionHandler`,对所有 Controller 请求返回统一错误结构( code/message/traceId ),禁止异常导致无响应。
- [ ] **全链路兜底**:补充 `HandlerExceptionResolver` / `ErrorController` 兜底,覆盖 Filter/Interceptor 层抛出的异常,保证一定能写回 JSON 或错误页。
- [ ] **异常可观测性**:所有异常输出结构化日志( traceId + uri + userId ),并对 NPE/运行时异常降级为友好提示。
- [ ] **日志追踪( MDC traceId )**:自研轻量 traceId 方案( Filter 生成/透传 `X-Trace-Id` + Logback MDC ),异常响应携带 traceId ;补齐异步线程池 MDC 传播,保证单体阶段排障闭环
- [ ] **出入参日志( DEBUG 向)**:提供统一请求日志打印能力,提供关闭并内置敏感字段脱敏( password/token/phone),并排除文件下载/上传等大 body 场景,避免性能与泄露风险。

# UI 优化
## 1. 引入更现代的 UI 框架
- [ ] **Layui 2 **:
>>>优点:生态成熟、文档完善、对 “后台管理系统” 组件覆盖好(表格/表单/弹窗/树/分页等)。
- 延用 Thymeleaf 模板体系
- [ ] **Alpine.js (轻交互现代化增强)**:
>>>Alpine.js 可以理解为“HTML 里写点简单状态/交互的轻量 Vue 替代品”,无需 Node/脚手架,直接 `<script>` 引入即可在 Thymeleaf 页面上用,特别适合后台系统里的表单联动、显示/隐藏、局部状态切换等需求。
- [ ] 定位:在不引入前端脚手架( Vue/React )的前提下,为 Thymeleaf 页面提供轻量的“状态驱动”交互能力,提升开发体验与页面现代感。
- [ ] 适用场景:表单联动、显示/隐藏切换、简单状态管理、局部区域交互(非复杂表格/树/弹窗)。
- [ ] 使用边界(双模式):
- [ ] Layui:负责后台系统的“重组件”( table/form/layer/tree/date 等)。
- [ ] Alpine.js:仅用于页面内“小状态/轻交互”,避免接管 Layui 渲染后的复杂 DOM 。
- [ ] 原则:同一页面内减少“jQuery + Alpine”混用;新增页面优先 Alpine 管状态,Layui 管组件。

# 功能优化增强
## 1. 导出(前端导出:ExcelJS )
- [ ] 导出功能从后端转向前端,使用 `xlsxjs` 在浏览器端生成并下载。
- [ ] 移除后端 Excel 导出体系(`@Excel/@Excels` 注解、ExcelUtil 相关导出入口以及 pom 依赖),避免数据库实体类被展示/导出需求污染。
- [ ] 导出元数据来源统一:以 **数据库字段注释( column comment )** 为准,由代码生成模板生成前端导出列定义(标题/字典映射/格式化等)。
- [ ] 导出范围约束( starter 阶段):仅支持“当前筛选条件下的中小数据量导出”;超大数据量导出暂不支持或后续扩展为后端异步任务。
- [ ] 落地方式(样板优先):生成代码模板时,默认生成导出逻辑,导出列和数据列一致
- [ ] ~~大量数据导出场影建议使用导出任务方式(启动框架不实现此功能)~~

## 2. 日志与可观测性
- [ ] **IP 库升级**:集成 `ip2region` 实现毫秒级地理位置解析。

## 3. 文件与媒体
- [ ] **存储抽象化**:实现 `FileStorageService`,支持本地/OSS 一键切换。
- [ ] **轻量化图片处理**:支持通过 URL 参数进行缩略、剪裁。

## 4. 定时任务
- [ ] **内置 xxljob** 替换现在定时任务组件
- 改造 XXL-JOB 为应用内置模块,实现零部署、开箱即用的分布式任务调度。通过配置使主节点兼任调度中心,替换原有 @Scheduled 任务方案。
- 考虑参考:https://gitee.com/haohandongku/RxJob

---
坑多到我...准备改一个