关于异常的捕获和处理

睡不醒的加菲 2016-03-18 03:22:48
第一次靠自己慢慢解决问题,再此做做笔记,各位大牛请多多指教。
先来描述问题,我的逻辑层里面包含多次对DB的操作
初次代码如下:
@Override
public int register(UserInfo userInfo, CarInfo carInfo) {
log.info("register() enter");
try {
sqlDao.create("CarInfo.insert", carInfo);
sqlDao.create("UserInfo.insert", userInfo);
UserCarInfo userCarInfo = new UserCarInfo();
userCarInfo.setId(SerialNo.getSmallUNID());
userCarInfo.setOpenId(userInfo.getOpenId());
userCarInfo.setUserInfoId(userInfo.getId());
userCarInfo.setCarInfoId(carInfo.getId());
return sqlDao.create("UserCarInfo.insert",userCarInfo);
} catch (Exception e) {
log.info("注册时异常",e);
return 1;
}
}
修改后代码:
@Override
public int register(UserInfo userInfo, CarInfo carInfo) {
log.info("register() enter");
try {
sqlDao.create("CarInfo.insert", carInfo);
sqlDao.create("UserInfo.insert", userInfo);
UserCarInfo userCarInfo = new UserCarInfo();
userCarInfo.setId(SerialNo.getSmallUNID());
userCarInfo.setOpenId(userInfo.getOpenId());
userCarInfo.setUserInfoId(userInfo.getId());
userCarInfo.setCarInfoId(carInfo.getId());
return sqlDao.create("UserCarInfo.insert",userCarInfo);
} catch (Exception e) {
log.info("注册时异常",e);
throw new RuntimeException("注册时异常", e);
}
}
总结问题:初始代码,捕获了异常并吃掉了,导致spring以为不存在异常,所以它的事务处理没有起作用;
修改代码后将异常抛出,spring的事务处理起作用。

另外分享一个关于异常处理的链接: http://www.ibm.com/developerworks/cn/java/j-lo-exception-misdirection/


...全文
74 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡不醒的加菲 2016-03-18
  • 打赏
  • 举报
回复
多谢前辈!!!
MamyA 2016-03-18
  • 打赏
  • 举报
回复
thinking in java里面有一个篇幅是专门讲异常处理的,里面有一个章是关于异常捕获和异常丢失的,楼主可以看看。
MamyA 2016-03-18
  • 打赏
  • 举报
回复
thinking in java里面有一个篇幅是专门讲异常处理的,里面有一个章是关于异常捕获和异常丢失的,楼主可以看看。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧