关于Javashop获取事务性插入id的验证和解释

王峰发表于:2016年05月12日 15:35:14更新于:2016年05月12日 16:01:08

背景

    Javashop采用spring jdbcTemplate 来操作数据库,采用spirng的注解方式支持事务。其中在读取插入的主键id时大家可能心里有一些疑虑,是不是保证了事务的下正确性呢?为此我们专门写了一个测试程序来验证事务的正确性。


验证思路


0015734321b894cae54a2d43f251b67


基于以上思路,我们拿购物车表中的addon字段做为存储线程号的字段,然后在将商品加入购物车的api中做了如下的逻辑:

//获取当前结程号			
String req = ThreadContextHolder.getHttpRequest().toString().replaceAll("com.enation.eop.processor.SafeHttpRequestWrapper", "")+StringUtil.getRandStr(6);	
		
//将线程号放到购物车的cart的addon字段	
cart.setAddon(req);							
//将线程号一起插入数据库,此时真正的主键id->线程号关系被记录在数据库了			
this.baseDaoSupport.insert("cart", cart);	
			
//读取当前事务主键id			
Integer cartid  = this.baseDaoSupport.getLastId("cart");						
//打印在控制台			
System.out.println(req+"->"+cartid);


接下来我们通过压力测试工工具(Jmeter)并发购物车添加的api:

 0015734342ddc93bcc9945ff78f2ebd

设定并发数为100,循环5次

001573434617ee11da347b57e4117d1

并发结束后,我们得到两组数据:

1购物车表:存储了真实的id和线程号的对应关系:

001573434c019261e02e7920c8018ea

2.文本日志:程序获得的id和线程号的关系:


001573434fa44d98ea3a23c3194290b


下面用我们的测试程序来验证两组对应关系是否一致,测试程序如下:

0015734368ac6a357ee5b246440709e

验证结果截图:

001573436ec62d23acdd9050a214a79


本测试的程序和jmeter的脚本在下面的附件中.






附件:idTest.zip • 7.62KB • 下载

    您需要登录后才可以回复
    提供技术服务