ENTRYPOINT 少写一对中括号,Spring Boot 的优雅停机就白开了
Dockerfile 用 shell 形式的 ENTRYPOINT 时,docker stop 的 SIGTERM 到不了 Java 进程,10 秒后直接被 SIGKILL;写对了也要让 Docker 的宽限期长过 Spring Boot 的 30 秒停机超时。用 Spring Boot 4.1.1 实测四种情况。
第 2 页 · 持续积累的技术实践
Dockerfile 用 shell 形式的 ENTRYPOINT 时,docker stop 的 SIGTERM 到不了 Java 进程,10 秒后直接被 SIGKILL;写对了也要让 Docker 的宽限期长过 Spring Boot 的 30 秒停机超时。用 Spring Boot 4.1.1 实测四种情况。
Simple Analytics 公开看板显示 2026 年 10 月 MRR 约 4.93 万美元。按创始人博客和联合创始人 newsletter 的自述,复盘它从 2018 年先收费上线、不投广告、老用户推荐分成,到免费档拖慢增长后改反向试用的路径。
Spring Boot 4.1.1 加 spring-boot-starter-batch-data-mongodb,Spring Batch 6.0.5 的 JobRepository 自动落到 MongoDB:条件报告、第 57 条失败后重启只读剩余 50 条、元数据文档结构,以及单机 Mongo 事务报错、序列未初始化、无索引、无集合前缀等坑。
堆固定 256M 的 Spring Boot 应用,RSS 从 268M 涨到 552M,MemoryMXBean 的 non-heap 只多了 1M。在 JDK 27 上用 NMT 的 baseline 和 summary.diff 实测,直接内存记在 Other 下面,线程栈 reserved 和 committed 差了几十倍,还顺手撞上了 MaxDirectMemorySize 默认等于 -Xmx 的 OOM。
Codex CLI 0.163.0(北京时间 10 月 16 日)支持回答中途插话转向,/config 可搜索并即时生效,/keymap 加 leader 键。另附在 codex sandbox 里跑最小 Spring Boot 测试时 Mockito 自 attach 失败,以及用 -javaagent 解决的实测记录。
MCP Java SDK 2.1.0 新增 addToolFilter 按请求过滤 tools/list,Streamable HTTP 服务端默认开启 30 分钟保活和空闲会话清理,并移除 2024-11-05 协议。在 Spring Boot 4.0.5 中实测:隐藏的工具按名字仍可调用;默认会话清理留下一个非守护线程,关闭上下文后靠 main 返回退出的进程不会结束,SIGTERM 停机不受影响。
用官方 tar 包起 Pulsar 5.0.0 standalone,Spring Boot 4.1.1 默认带的 4.2.4 客户端直接能收发。换成 5.0 客户端时只改版本号会先后撞上 slog 和 shade 两个报错,改用 pulsar-client-v5-all,再排除 pulsar-client-all 和 log4j-to-slf4j 两个包后跑通。
nginx 10 月 14 日发布 1.30.6 和 1.31.7,修复五个漏洞,其中 alias、map、AIO 相关的三个 CVSS 3.1 为 8.1,都需要特定配置才会触发;截至 10 月 16 日 Debian 仅 sid 已修复。
Spring Boot 4.1.1 的 spring-boot-starter-opentelemetry 实测:不用 agent 把 trace、指标和日志推到本地 OTel Collector。默认 10% 采样、trace 地址没有默认值、老属性名被忽略、Logback appender 的 incubator 版本冲突等坑,以及和 Java agent 的取舍。
在 JDK 27 上走一遍 JMOD 示例,再用 jdeps 算出 Spring Boot 4.1.1 应用的平台模块、用 jlink 生成 60M 运行时并跑通,记录 --compress=2 弃用、JMOD 不能运行、缺 java.desktop 启动失败等坑。