关注公众号 `N学无止界` 获取更多
场景描述:
某业务系统采用freemark根据模板生产文件的时候发现在同一个线程内,同一个数据源“连续”生成两次文件结果不一样。
依赖环境:
JDK1.6 spring-framework-3.0.3 freemarker-v2.3.20
异常表现:
同一个数据源“连续”生成两次文件结果不一样。
模拟代码:
public static void main(String[] args) {
String templateFilePath = "H:\\temp\\javaBean\\template.txt";
String saveFilePath = "H:\\temp\\javaBean\\result.txt";
Map<String, Object> dataMap = new HashMap<String, Object>();
// 模拟数据库获取数据
Map testTarget = new LinkedCaseInsensitiveMap();
testTarget.put("key", "数据库数据。");
// 业务逻辑
String dealKey = "KEY";
if(testTarget.containsKey(dealKey)){
testTarget.put(dealKey, "新的业务逻辑值。");
}
dataMap.put("map", testTarget);
// 下面根据dataMap template 生成渲染

探讨了在使用Freemarker模板引擎时遇到的一个Bug,即在同一个线程内使用同一数据源连续生成两次文件结果不同的问题。分析了异常原因在于LinkedCaseInsensitiveMap的特性与Freemarker内部处理机制,并提供了修复建议。
最低0.47元/天 解锁文章
6722





