spring-framework环境下freemark应用异常分析

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

关注公众号 `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 生成渲染
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_software

感谢打赏,我努力提供优质内容~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值