关于异常的捕获和处理
先来描述问题,我的逻辑层里面包含多次对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/
相关推荐
java进行error捕获和处理示例(java异常捕获)
通常来说,大家都是对Java中的Exception进行捕获和进行相应的处理,有些人说,error就无法捕获了。其实,error也是可以捕获的。Error和Exception都是Throwable的子类。既然可以catch Throwable,那么error也是可以catch的
Java捕获和处理异常.pdf
Java捕获和处理异常.pdf 学习资料 复习资料 教学资源
C++代码展示使用try-catch块来捕获和处理异常方法
C++中处理异常时,可以使用try-catch块来捕获和处理异常。try块包含有可能抛出异常的代码,而catch块用于捕获特定类型的异常并处理它们。 在 processNumber() 函数中,我们模拟了一些可能抛出异常的情况。如果传入的数字为负数,我们使用 throw 语句抛出一个 std::runtime_error 类型的异常,表示遇到了负数。如果传入的数字为零,我们抛出一个 MyException 类型的异常,这是我们自定义的异常类。如果传入的数字为正数,则正常输出。 在 main 函数中,我们使用 try 块包裹可能抛出异常的代码。然后,我们使用多个 catch 块来捕获不同类型的异常。 第一个 catch 块捕获 std::runtime_error 类型的异常,并输出异常的描述信息。 第二个 catch 块捕获 MyException 类型的异常,并输出自定义异常的描述信息。 最后一个 catch 块使用省略号(...)来捕获其他类型的异常,以防万一发生了未知类型的异常。在这个示例中,我们只是简单地输出了一条信息表示捕获到了未知异常。
throw抛出异常和try捕获异常和catch处理异常.cpp
小甲鱼视频《C++快速入门》源码
BugTrap:BugTrap:在非托管和托管.NET代码中捕获未处理的异常
错误陷阱 BugTrap是一种工具,可以捕获非托管和托管.NET代码中未处理的异常。 BugTrap还支持将崩溃报告发送到远程服务器进行分析。 原始作者Maksim Pyatkovskiy有的精彩详细介绍了如何使用BugTrap。 该存储库中的BugTrap源代码和二进制文件是由原始作者根据MIT许可授予的。 换句话说,您可以在商业和非商业应用程序中自由使用BugTrap。 下载并安装 检查此存储库中的发行版以获取最新版本: 包含Win32 / x64项目所需的所有BugTrap组件: BugTrap[U][D][N][-x64].dll -x64 BugTrap[U][D][N][-x


Java SE
