spring 事务管理不起作用原因分析与解决
来源:互联网 发布:健体与健美的区别 知乎 编辑:程序博客网 时间:2024/05/21 09:16
今天使用spring的事务管理,使用注解@Transactional,在service上一直不能起作用,后来在才梁哥的指导下,发现了问题
原始不起作用的代码:
@Override @Transactional public Map<String,Object> addUser(SyUser user) { Map<String,Object> map = new HashMap<String,Object>(); List<Integer> list = user.getRoleIdList(); if(list==null || list.size()==0){ map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL); map.put(Constant.KEY_MSG, "用户无角色信息,无法创建用户"); return map; } try{ SyUser oldUser = mapper.queryUserByName(user.getUsername()); if(oldUser!=null){ map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL); map.put(Constant.KEY_MSG, "输入的登录帐号已存在,请重新输入!"); return map; } //先保存用户,获取用户id mapper.addSyUser(user); Integer id = user.getId(); //再保存对应信息 mapper.addUserRole(id, list); map.put(Constant.KEY_STATUS, Constant.STATUS_SUCC); map.put(Constant.KEY_MSG, "新增用户信息成功,继续添加请填写,不再添加请退出。"); }catch (Exception e) { logger.error("保存用户信息出错", e); map.put(Constant.KEY_STATUS, Constant.STATUS_ERROR); map.put(Constant.KEY_MSG, "保存用户信息时出现错误,请找管理人员解决!"); } return map; }
在这里我直接catch了exception,后来在才梁哥的指导下发现,原来spring必须要你抛出异常才会去roback事务。如果你不抛出异常,那么它就认为这个方法没有问题,就会将事务提交了。
所有只需要将异常抛出即可。
修改后事务生效的代码:
@Override @Transactional(rollbackFor=Exception.class) public void addUser(SyUser user,Map<String,Object> map)throws Exception { List<Integer> list = user.getRoleIdList(); if(list==null || list.size()==0){ map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL); map.put(Constant.KEY_MSG, "用户无角色信息,无法创建用户"); return ; } try{ SyUser oldUser = mapper.queryUserByName(user.getUsername()); if(oldUser!=null){ map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL); map.put(Constant.KEY_MSG, "输入的登录帐号已存在,请重新输入!"); return ; } //先保存用户,获取用户id mapper.addSyUser(user); Integer id = user.getId(); //再保存对应信息 mapper.addUserRole(id, list); map.put(Constant.KEY_STATUS, Constant.STATUS_SUCC); map.put(Constant.KEY_MSG, "新增用户信息成功,继续添加请填写,不再添加请退出。"); }catch (Exception e) { logger.error("保存用户信息出错",e); map.put(Constant.KEY_STATUS, Constant.STATUS_ERROR); map.put(Constant.KEY_MSG, "保存用户信息时出现错误,请找管理人员解决!"); throw e; } }另外由于该方法需要抛出异常,而且需要返回结果,所以将返回结果的map由返回值改成了传入参数,这样即使出现错误也不会出现无法获取操作结果的问题,
0 0
- spring 事务管理不起作用原因分析与解决
- 事务管理不起作用的几个原因
- springMvc+mybatis事务管理不起作用解决
- DefaultAnnotationHandlerMapping不起作用,分析原因
- spring+mybatis使用事务管理不生效原因分析
- spring 声明式事务管理,回滚不起作用
- Spring定时器不起作用的原因
- 502原因分析与解决
- layout_gravity不起作用的原因分析
- Spring事务管理失效的原因
- Spring事务管理失效的原因
- spring事务管理全面分析
- spring事务管理源码分析
- spring事务管理全面分析
- Spring事务管理源码分析
- Spring事务管理源码分析
- Spring事务管理源码分析
- spring Aspect 实现自定义注解的日志记录,有时候注解类不起作用的原因分析
- ASP.NET学习资料
- a
- andriod6.0低功耗模式(关闭wifi、蓝牙、gps、屏幕亮度等)
- PAT-Find Coins (25)
- Vim如何保存需要root权限的文件
- spring 事务管理不起作用原因分析与解决
- string拼接和StringBuilder性能对比
- 【util】工具类方法 总结
- 九个酒迷喝醉酒
- 关于request.getServletPort()获取访问地址的说明
- vijos P1067 守望者的烦恼
- iOS猜拳游戏源码
- js遮罩层的应用
- oracle忘记用户名和密码