为开发者而生的技术社区

让技术生根,让灵感生长。

从 Java 与 Spring,到 AI 与开源。分享经得起实践的知识,和认真做技术的人一起成长。

↗ SHARE. BUILD. GROW.
⌘探索技术专题找到你的下一站Agent21 篇文章 ↗Java560 篇文章 ↗Spring578 篇文章 ↗架构运维320 篇文章 ↗面试与职场68 篇文章 ↗

最新文章

持续更新的技术实践

Spring Boot 4.1.1 自带的 Jackson 不含泛型类型 id 修复,要手动升到 3.1.8

Jackson 3.1.8 和 3.2.4 修复了与 2.x 同一批 CVE,3.2.4 还多一个 CVE-2026-110729,这些编号目前在 cve.org 上都是 RESERVED。Spring Boot 4.1.1 实测:默认的 3.1.5 和 3.1.7 会实例化泛型类型 id 里白名单外的类,3.1.8 会拒绝;升 3.2.4 要同时把 jackson-2-bom.version 改到 2.22.4,否则 jackson-annotations 停在 2.21,反序列化抛 NoSuchMethodError。

一个程序员独自维护 Healthchecks.io 11 年,定时任务监控做到月收入 2.6 万美元

定时任务监控服务 Healthchecks.io 从 2015 年上线起只有创始人 Pēteris Caune 一个人,官网 2026 年 10 月公布 MRR 2.6 万美元、付费账户 1236 个。按他的博客复盘从 5 美元 MRR 起步、不招人不追大客户的做法和四档定价,并用 Spring Boot 定时任务接上自建的开源版实际跑了一遍。

Java 采样分析器 async-profiler 4.6 直推 OTLP,不加 -t 就收不到线程名

async-profiler 4.6 能把 profile 以 OTLP 格式直接 POST 到 HTTP 端点,wall clock 的线程过滤改为按线程名,内置 HTTP 服务器被删掉。在 Spring Boot 4.1.1 应用上接本地接收端实测:默认路径是 /v1development/profiles,不加 -t 时请求体里没有线程名,端点不通时 asprof 退出码为 200。

把 Spring Boot 3.5 项目升到 4.1,classic starter 带进的 gRPC 会让 Security 应用起不来

把一个 Web、JPA、Security、Actuator、Validation 的 Spring Boot 3.5.16 项目升到 4.1.1,每步一个 git 提交:主代码不用改,测试切片和 TestRestTemplate 换了包,@MockBean 已删。4.1.1 的 spring-boot-starter-classic 会带进 spring-boot-grpc-server 却不带 Spring gRPC,CSRF 没关的 Security 应用启动即报 NoClassDefFoundError,4.0.8 没有这个问题,排除该模块即可。换成模块化 starter 时,只引 spring-security-test 会让 @WebMvcTest 里没有 HttpSecurity。

Java 的 Stream Gatherers 按金额切批、按字段去重,漏写 finisher 最后一批会丢

Stream Gatherers 在 JDK 24 由 JEP 485 定稿。这里用 JDK 27 和 Spring Boot 4.1 跑了 windowFixed、windowSliding、scan 三个内置 gatherer,再用 Gatherer.ofSequential 写了按字段去重和按累计金额切批两个自定义操作,顺带讲清 push 的返回值怎么让流短路、finisher 怎么在流末收尾。

开源博客平台 Ghost 没有投资人,创始人也不持股,年化营收 1115 万美元

开源发布平台 Ghost 由非营利基金会运营,没有投资人,两位创始人也不持股。截至 2026 年 10 月 19 日,官网显示年化营收 1115 万美元。按官网数据和创始人 John O'Nolan 的自述,看它怎么靠 Kickstarter 起步,用开源免费加托管收费养活全职团队(2024 年时 30 多人),以及现在的四档定价。