首页 / 标签TAG / SPRINGFORALL

# java

围绕 java 的技术文章与经验分享。

共 1030 篇文章

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。

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

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

Spring Boot 4.1 接 NullAway 的 JSpecify 模式,漏报的空指针全在 JDK 和 Jackson 上

在 Spring Boot 4.1.1 项目里写了 17 处不判空的调用,接上 Error Prone 2.50.0 和 NullAway 0.14.2 实测:JSpecify 模式报 12 个错误,Spring API 上直接标 @Nullable 的返回值全部拦下;List.get、System.getProperty、HashMap.put 和 RowMapper 里的 ResultSet.getString 要加 JSpecifyExperimental 才报,Jackson 的 JsonNode.get 始终漏网。JDK 21 上要配 .mvn/jvm.config 和 -XDaddTypeAnnotationsToSymbol=true,编译耗时中位数从 2248 ms 到 4139 ms。

Jackson 2.x 泛型类型 id 能绕过白名单,Spring Boot 3.5 得手动升到 2.21.8

Jackson 10 月 17 日发布 2.22.4、2.21.8、2.18.12,修复 databind、Avro、CBOR、Protobuf、Smile 的多个 CVE,其中 CVE-2026-110879 让泛型类型 id 里的类型参数也要过 PolymorphicTypeValidator。在 Spring Boot 3.5.16 中实测:2.21.4 和 2.21.7 会实例化白名单外的类,2.21.8 返回 400 并在日志里点名拒绝。

Starship 1.27 修了两个提示符安全洞,旧版碰上指向 /dev/zero 的软链会吃掉 3.5G 内存

Starship 1.27.0(北京时间 10 月 17 日)修了 GHSA-x486(版本元数据符号链接可拖垮提示符)和 GHSA-679r(降信任仓库仍走 git 可执行文件),并把 package 模块补上 build.gradle.kts。对照 1.26.0/1.27.0 官方 musl 包,在最小 Spring Boot 4.1.1 Gradle Kotlin DSL 项目上复现了安全问题与版本号显示差异。

JDK 27 发布前差点带上一个改坏字符串的 C2 bug,我把旧 EA 版本找回来复现了一遍

JDK 27 GA 前不到一个月,C2 的 EncodeISOArray intrinsic 被发现会把字符串前 4 个字节写坏(JDK-8390546,P1),最后在 GA 构建 27+35 里回退修掉。用 Spring Boot 实测 27-ea+23/24/34、27 GA 和 28-ea+20:ea+24 和 ea+34 稳定复现,关掉压缩对象头就消失。还钉着 27 EA 镜像的该换了。