老废物乐园

Spring Boot 2.3 优雅停机与健康检查配置

每次发版都有几十个 502,终于找到原因了 我们服务是 2019 年 11 月上的 Kubernetes,1.16 版本,Deployment 配 4 个副本。从上线那天起,每次滚动发布,网关那边都会报几十个 502,持续时间一两秒。因为量不大、用户基本无感,一直没排。 直到 1 月初做活动,晚上八

Administrator Administrator 发布于 2020-01-25

Spring Boot 自动配置原理与自定义 Starter

同事问我:为什么加个依赖就能用了 8 月中旬,刚入职的同事跑来问我一个他觉得"很魔幻"的事:他只在 pom 里加了 spring-boot-starter-data-redis,然后 @Autowired private StringRedisTemplate 就能用了,中间没写任何配置类。他问我

Administrator Administrator 发布于 2019-08-20

Spring 事件机制与异步解耦实践

加一个"送新人券"的需求,我改了注册方法 4 月底产品提了个小需求:新用户注册成功后自动发一张 20 元的无门槛券。我打开 UserService.register(),120 行,里面已经塞了校验、插库、发欢迎短信、埋点上报、初始化用户配置五件事。 我在第 87 行插了三行调用发券的代码。提 PR

Administrator Administrator 发布于 2019-05-01

Spring AOP 失效的那些场景与代理机制

测试提了个 bug:数据没回滚 3 月初做批量导入功能,测试提了个单:导入 1000 条订单,第 500 条数据有误抛了异常,预期全部回滚,结果前 499 条都写进库了。 我第一反应是不可能,@Transactional 明明标着。看代码: @Service public class OrderIm

Administrator Administrator 发布于 2019-03-19

Spring Bean 的生命周期与循环依赖解决

同事的循环依赖启动报错,我的没报错 2 月底做权限模块重构,同事写的代码一启动就挂: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'roleServ

Administrator Administrator 发布于 2019-02-23

MyBatis 插件与分页:PageHelper 的正确用法

同事问:我这个接口没写 limit,为什么只返回 10 条 1 月底,隔壁工位的同事喊我过去看个怪事。他的导出接口调了两次 Mapper:第一次查订单列表,第二次查订单状态统计。结果统计接口只返回了 10 条数据,而他的 SQL 里压根没有 limit。 我把 MyBatis 的 SQL 日志打开(

Administrator Administrator 发布于 2019-02-05

@Autowired 注入失败的各种原因与排查清单

注入的 service 是 null,我对着空指针查了一下午 十二月初写了个定时任务,跑起来第一行就 NPE: @Component public class OrderTimeoutJob { @Autowired private OrderService orderService

Administrator Administrator 发布于 2018-12-07

application.yml 配置不生效?Spring Boot 配置优先级梳理

改了 application.yml 重启了八次,配置还是不生效 十一月底给服务加一个超时配置,我在 application.yml 里加了这么一行: http: connect-timeout: 5000 然后重启,打印出来还是默认值 3000。我以为没编译进去,clean 重新打包,还是

Administrator Administrator 发布于 2018-11-28

@Transactional 事务不生效的 7 种场景

扣了库存没生成订单,@Transactional 一个字没生效 十一月中旬那次上线后,客服陆续接到投诉:用户付款成功,但订单列表里查不到。我翻数据库,发现 t_stock 的库存扣了,t_order 里却没有对应记录。同一个 @Transactional 方法里的两个操作,一个成了一个没成。 这种"

Administrator Administrator 发布于 2018-11-17

Spring MVC 日期参数绑定 400 错误排查

前端说:你的接口又报 400 了 那天下午前端同事在工位上喊我,说提交表单一直 400,请求都发出去了。我看了下 Chrome 的 Network 面板: Request URL: /order/list Request Method: GET Status Code: 400 Bad Reques

Administrator Administrator 发布于 2018-03-20