方法A中调用了方法B,方法A注解事务@Transactional(propagation=Propagation.REQUIRED),这样,不管方法B给不给事务的注解,它们都将在一个事务中。这样B方法虽然先做了数据库的插入操作,但是事务并没有提交,要等到A方法执行完,提交事务之后才生效,如果A方法后面出错,导致事务中断,最后没有提交,则B方法中更新的也会被回滚。示例代码如下:
@Transactional(propagation=Propagation.REQUIRED)
@Override
public void addUser(GsUser user) {
logger.info("首先需要添加一个管理员...");
Admin admin = new Admin();
admin.setAdminname("myAdmin");
admin.setAdminpass("123456");
admin.setType(1);
admin.setVarGs("你自己去猜吧!");
addAdmin(admin);
logger.info("管理员添加完毕...");
logger.info("开始添加招商用户,用户名为: {}", user.getGsName());
// try {
gsUserMapper.insertSelective(user);
// } catch (Exception e) {
// try {
// logger.error("插入用户表失败!name={}",user.getGsName());
// throw new Exception("inserGsUser失败!");
// } catch (Exception e1) {
// e1.printStackTrace();
// }
// }
logger.info("添加招商用户完毕。");
}
//@Transactional(propagation=Propagation.REQUIRED)
@Override
public void addAdmin(Admin admin) {
logger.info("开始添加管理员,用户名为: {}", admin.getAdminname());
adminMapper.insertSelective(admin);
logger.info("添加管理员完毕。");
}