《用户通知体系全流程实战》
第3章 通知模板管理
3. 通知模板管理:模板引擎选型与版本控制
通知模板是用户通知体系的核心资产,它决定了消息的呈现形式与动态内容的填充能力。本节将深入探讨模板引擎的选型策略、变量替换机制以及模板版本管理的实战方案。
3.1 模板引擎选型对比
3.2 模板变量替换实战
变量替换是模板引擎的核心能力。以下展示 FreeMarker 与 Thymeleaf 在通知模板中的典型用法:
📄 FreeMarker 模板示例
<!-- 订单通知模板 order_notify.ftl -->
尊敬的 ${userName} 您好!
您的订单 #${orderId} 已${status}。
商品:${productName}
数量:${quantity} 件
金额:¥${totalPrice?string("0.00")}
<#if expressCode??>
物流单号:${expressCode}
</#if>
感谢您的惠顾!
${signature}
📄 Thymeleaf 模板示例
<!-- 邮件通知模板 email_notify.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<h2 th:text="'尊敬的 ' + ${userName} + ' 您好!'">占位</h2>
<p>您的订单 <strong th:text="${orderId}">123</strong>
已 <span th:text="${status}">发货</span>。</p>
<ul>
<li>商品:<span th:text="${productName}">商品名</span></li>
<li>数量:<span th:text="${quantity}">1</span> 件</li>
<li>金额:¥<span th:text="${#numbers.formatDecimal(totalPrice, 1, 2)}">0.00</span></li>
</ul>
<p th:if="${expressCode != null}">物流单号:<span th:text="${expressCode}"></span></p>
<p th:text="${signature}">签名</p>
</body>
</html>
3.3 模板版本管理策略
通知模板会随业务迭代频繁变更,必须建立完善的版本管理机制。推荐采用以下分层方案:
-
📌
语义化版本号:采用
MAJOR.MINOR.PATCH格式(如v2.1.3),MAJOR 变更表示不兼容改动,MINOR 表示新增变量,PATCH 表示修复。 - 📌 存储方案:模板内容存储在数据库(如 MySQL TEXT 字段)或 Git 仓库中,每条记录关联版本号、生效时间、操作人。
- 📌 灰度发布:新版本模板先在小范围通知中验证,确认无误后全量切换,支持一键回滚到上一版本。
- 📌 变更审计:记录每次模板修改的 diff 对比、审批记录、上线时间,满足合规要求。
3.4 最佳实践总结
- 选型建议:短信/推送通知优先 FreeMarker(性能高、逻辑强);邮件/Web 通知优先 Thymeleaf(原型友好、维护直观)。
- 变量安全:所有用户输入变量必须经过 HTML 转义(FreeMarker 用
?html,Thymeleaf 用th:utext需谨慎)。 - 缓存策略:生产环境开启模板缓存(FreeMarker 的
template_update_delay设为 0 仅开发环境)。 - 版本管理:建议使用数据库 + Git 双存储,数据库保证运行时快速读取,Git 保证历史追溯与 diff 对比。
💡 核心原则:模板与数据分离,版本与发布联动,变更可追溯,回滚有保障。