review 发现 #1:定时线程刚做完超时快照(buffer 已清空)、正在 doFlush 跑业务 方法时优雅停机——shutdown() 不等它,forceFlush() 见空 buffer 直接返回(连 flushLock 都不进),stop 走完后 JVM 退出杀掉 daemon 线程,该批消息早已逐条 ACK,静默丢失。这是终审 shutdownNow→shutdown 的对偶缝隙:温和关闭解决了 "不打断在刷批",但没人等它刷完。 修复:shutdown() 后补 awaitTermination(30s 上界,超时/中断打 WARN 继续停机, 不让挂死的业务方法永久卡住 Spring 关闭)。 测试:往真定时线程塞在途任务模拟"stop 瞬间定时线程正在刷批",断言 stop 返回前任务已完成(修复前该测试失败:stop 立即返回)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>