昨天跟波总了解了下事务的处理,今天写个Test备忘一下。
在控制层中使用事务,简单的代码展示
@Before({POST.class , Tx.class})
public void saveWxSetting(){
log.info("saveWxSetting");
SysConfig sys1 = new SysConfig();
sys1.setId(PKUtil.getPK());
sys1.setKey("1");
sys1.setVal("1");
sys1.save();
SysConfig sys2 = new SysConfig();
sys2.setId(PKUtil.getPK());
sys2.setKey("1");
sys2.setVal("1");
sys2.save();
renderText("");
}
其中key为唯一所以,事务生效。
后来探讨了下static方法是用与测试,代码有些变化:
在业务层增加:
public static boolean test(SysConfig sys){
return sys.save();
}
控制层:
@Before({POST.class , Tx.class})
public void saveWxSetting(){
log.info("saveWxSetting");
SysConfig sys1 = new SysConfig();
sys1.setId(PKUtil.getPK());
sys1.setKey("1");
sys1.setVal("1");
SysConfig.test(sys1);
SysConfig sys2 = new SysConfig();
sys2.setId(PKUtil.getPK());
sys2.setKey("1");
sys2.setVal("1");
SysConfig.test(sys2);
renderText("");
}
测试依旧OK:)
后台回到业务层,意味着取消控制层的事务
@Before(POST.class)
public void saveWxSetting(){
log.info("saveWxSetting");
SysConfig sys1 = new SysConfig();
sys1.setId(PKUtil.getPK());
sys1.setKey("1");
sys1.setVal("1");
SysConfig sys2 = new SysConfig();
sys2.setId(PKUtil.getPK());
sys2.setKey("1");
sys2.setVal("1");
SysConfig.test(sys1,sys2);
renderText("");
}
///
@Before(Tx.class)
public static boolean test(SysConfig sys1,SysConfig sys2){
return sys1.save()&&sys2.save();
}
显然是失败了:( 因为:你这是业务层 aop 实现的事务,注意要用一下 Duang.duang(...) 去触发
如果在业务层中调用,代码变为:
@Before({POST.class})
public void saveWxSetting(){
log.info("saveWxSetting");
SysConfig sys1 = new SysConfig();
sys1.setId(PKUtil.getPK());
sys1.setKey("1");
sys1.setVal("1");
SysConfig sys2 = new SysConfig();
sys2.setId(PKUtil.getPK());
sys2.setKey("1");
sys2.setVal("1");
SysConfig sys = Duang.duang(SysConfig.class);
sys.test(sys1, sys2);
renderText("");
}
@Before(Tx.class)
public boolean test(SysConfig sys1,SysConfig sys2){
return sys1.save()&&sys2.save();
}
测试下来 Dung 和 Enhancer 效果一样:)