edyang

我干了什么 究竟拿了时间换了什么
技术分享时间线软件开发、设备接入、视觉与运维实践

Spring Boot Actuator:健康响应要说明检查了什么

一个进程能响应 HTTP,不表示数据库和关键依赖已经可用。

一个进程能响应 HTTP,不表示数据库和关键依赖已经可用。健康接口的含义需要与使用场景匹配。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 Actuator(运行管理...

Spring Boot 数据访问:事务要放在业务边界

一个服务方法先写订单再写明细,需要作为整体成功或整体失败。

一个服务方法先写订单再写明细,需要作为整体成功或整体失败。自动数据源不会替你判断事务范围。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 事务管理器围绕受管方法维护数...

Spring Boot Web:表单校验与业务校验分层

接口接受了 JSON,并不表示其中所有值都能用于业务写入。

接口接受了 JSON,并不表示其中所有值都能用于业务写入。输入结构和业务规则需要分别验证。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 反序列化负责数据类型,Bea...

Spring Boot 配置:同一个端口为什么读取了另一个值

配置文件写了端口,启动后却用了别的值,通常需要查看属性来源与优先级。

配置文件写了端口,启动后却用了别的值,通常需要查看属性来源与优先级。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 配置可以来自应用文件、外部文件、环境变量和命令行等...

Spring Boot 深入:自动配置为何会生效或退让

添加一个依赖后行为变了,往往是自动配置条件被满足。

添加一个依赖后行为变了,往往是自动配置条件被满足。理解条件,比记住默认行为更可靠。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 自动配置可以根据类存在、属性值和已有...

Spring Boot 入门:从一个可执行 Web 工程开始

Spring Boot 的方便之处,是把常见 Web 依赖和启动方式组织起来。

Spring Boot 的方便之处,是把常见 Web 依赖和启动方式组织起来。先做最小工程,才能看清自动装配边界。 本文使用JDK 7、Maven 与 Spring Boot 1.2.2.RELEASE,代码为工程片段。Spring Boot(约定化应用框架)减少常见装配代码,但自动配置仍有条件和来源。本文使用一代框架的属性与接口,不混入后续版本的配置名称。 1. 从现象推到机制 st...

研究 Git:小提交应该按业务意图拆分

提交越小不一定越清楚。

提交越小不一定越清楚。把一个完整修复拆成不能独立工作的碎片,同样增加审查难度。 本文使用Git 2.x 与独立演示仓库。Git(分布式版本管理)保存提交对象和引用,工作区、暂存区与提交历史不是同一份状态。每次操作先判断它改变哪个区域,再决定是否适合当前协作情境。 1. 从现象推到机制 合理提交应有单一目的、可解释差异和完整依赖。格式化、重命名与行为修改混在一起,会掩盖真正逻辑;但接口和...

研究 Git:用二分查找定位回归提交

历史提交很多时,逐个检查成本高。

历史提交很多时,逐个检查成本高。只要能稳定判断好坏,就可以用二分缩小范围。 本文使用Git 2.x 与独立演示仓库。Git(分布式版本管理)保存提交对象和引用,工作区、暂存区与提交历史不是同一份状态。每次操作先判断它改变哪个区域,再决定是否适合当前协作情境。 1. 从现象推到机制 bisect 在已知正常与已知异常之间选择中间提交,根据判断排除一半区间。判定规则必须稳定且与环境变化解耦...

研究 Git:fetch、pull 与远端跟踪分支

看到 origin/master 有新提交,不代表本地 master 已经包含这些变化。

看到 origin/master 有新提交,不代表本地 master 已经包含这些变化。两者是不同引用。 本文使用Git 2.x 与独立演示仓库。Git(分布式版本管理)保存提交对象和引用,工作区、暂存区与提交历史不是同一份状态。每次操作先判断它改变哪个区域,再决定是否适合当前协作情境。 1. 从现象推到机制 fetch 获取远端对象并更新远端跟踪引用,通常不会替你整合当前分支。pul...

研究 Git:撤销提交与移动分支不是同一操作

线上发现某次改动有问题,撤销业务变化和删除历史记录是两种不同意图。

线上发现某次改动有问题,撤销业务变化和删除历史记录是两种不同意图。 本文使用Git 2.x 与独立演示仓库。Git(分布式版本管理)保存提交对象和引用,工作区、暂存区与提交历史不是同一份状态。每次操作先判断它改变哪个区域,再决定是否适合当前协作情境。 1. 从现象推到机制 revert 创建一个反向变化的新提交,保留发生过的历史;reset 移动引用,并按模式影响索引或工作区。共享分支...