实测 Spring Framework 7 的 CaffeineCacheManager 与 spring-data-redis 的 RedisCacheManager:命中读取 Caffeine 平均 0.08 µs、Redis(本机回环)平均 42.34 µs,8 线程吞吐 39973 万对 8 万次每秒;值大小影响不明显;Redis 的 put 返回时数据还没对 get 可见(2000 次里 1944 次读不到);Caffeine 返回同一个引用,Redis 每次反序列化新对象。
实测 Jackson 2.21.5 与 Jackson 3.1.5 序列化与反序列化同一个约 1 KB 的订单对象:输出同样 980 字节(Jackson 3 字段按字母序);序列化单线程 Jackson 3 快 9% 到 13%、4 线程慢 13% 到 19%,反序列化持平,readTree 单线程 98%;差距大多在 20% 以内。
实测 Spring Boot 4.0.8 + HikariCP + MySQL 上 maximum-pool-size 从 1 到 64:查询是 sleep 5 ms 时吞吐从 163 涨到 7718 次/秒几乎线性;查询是全表扫描的 CPU 型时从 82 涨到 434 次/秒,8 之后增长很慢;池小时有线程整个测试期间几乎拿不到连接(P99 获取连接约 5 秒)。
实测 Spring Boot 4.0.8 最少需要多少堆:只有 starter-web 的最小应用 -Xmx10m 能启动(6m、8m 都 OOM),加 JPA 与 H2 后 -Xmx20m 能启动(16m OOM);但进程常驻内存(RSS)堆压到 10 MB 仍有约 147 MB,JPA 应用 220 MB 以上;小堆时 JPA 应用启动明显变慢。
实测 Spring Security 7 的 OAuth2 Client(oauth2Login):跳转链共 7 个请求,机密客户端也自动带 PKCE;登录后 principal 是 DefaultOidcUser;令牌默认存在进程内存里;62 秒有效期的 access_token 在 4 秒后被自动用 refresh_token 刷新;客户端重启后旧 JSESSIONID 302 回授权入口。
实测 Spring Security 7 的安全响应头与 HTTPS 重定向:默认加 nosniff、X-Frame-Options: DENY、no-store 一组缓存头,没有 CSP;HSTS 只出现在 HTTPS 响应里;redirectToHttps 配 portMapper 把 HTTP 302 到 HTTPS;requiresChannel 老写法在 7.0.7 里启动失败;放在反向代理后面不配 forward-headers-strategy 就会白白重定向。
实测 Spring Security 7 的 rememberMe 与登录失败防护:remember-me cookie 有效期 14 天、值带 SHA256 签名,恢复的身份过不了 fullyAuthenticated;登出不会让已保存的 cookie 失效,改密码、重启(默认随机 key)才会;{noop} 密码登录后被升级成 bcrypt 也会让 cookie 失效;框架默认没有失败锁定,自己监听事件实现后登录页仍只显示 Invalid credentials。
实测 Spring Security 7 的测试:@WebMvcTest 不加载自己的安全配置,/admin 谁登录都能进、测试假绿;@WithMockUser 的 roles 与 authorities 的区别、POST 要 csrf()、httpBasic 与 @WithUserDetails 走真实用户;方法级安全的异常类型;@WithMockUser 不会传播到新线程;standaloneSetup 完全绕过安全过滤器。
实测 Spring Cloud 的版本矩阵:每个发布列车的 BOM 背后的 Boot 版本(2023.0→3.3、2024.0→3.4、2025.0→3.5、2025.1→4.0);Boot 与 Cloud 大版本错配启动时是 NoClassDefFoundError,关掉兼容性校验器没用;Spring Cloud Alibaba 的版本号与 Nacos 客户端版本的对应。
实测 Spring Cloud Commons 的服务发现与注册抽象:自动注册在 Web 服务器启动之后、ApplicationRunner 与 ReadyEvent 之前发生;serviceregistry 端点的 id 与行为;enabled=false 时不创建注册相关的 bean;优雅停机时 deregister 要等在途请求处理完才执行;CompositeDiscoveryClient 如何合并多个 DiscoveryClient。
实测 Spring Cloud LoadBalancer:默认是 RoundRobinLoadBalancer,起点每次启动不同;换成 RandomLoadBalancer 短期不均匀;后端挂掉默认仍然被轮询、三分之一请求失败;health-check 缺少 RestClient bean 时全部请求 No instances available;实例列表默认被缓存约 35 秒,新实例要等这么久才被调用到。
实测 OpenFeign 的声明式客户端:@FeignClient 接口是 JDK 动态代理,在注入时创建、每个客户端名一个子上下文;Spring MVC 注解被 SpringMvcContract 解析成 HTTP 请求;只写 name 不写 url 时必须引入 loadbalancer starter,否则启动失败;一个方法两个 @RequestBody 启动即报错。