Spring @Transactional 事务回滚
一、问题描述:
service层,一个method中包含了多条对数据库的操作。若sql1成功,sql2出错,我们希望这个method中的所有对数据的操作都会回滚,即sql1也是失败的情况。
//此方法:前边的数据库操作成功,发生数据库操作之后,后边的所有数据库操作将失败。
public method(){
service.save1(User1);//操作sql1
service.save2(User2);//操作sql2 //save2执行失败,User1已经被保存到数据库中,希望被回滚
.......
service.save9(User9);//操作sql9
}
二、JAVA异常:
1.异常简介
Java异常是Java提供的一种识别及响应错误的一致性机制。
Java异常机制可以使正常业务代码和异常处理代码分离,提高程序健壮性。
异常类型表示了什么错误被抛出;异常堆栈跟踪表示了代码中某个类的某一行出错;异常信息表示了错误的原因。
Java异常机制经常用到以下几个关键字:try、catch、finally、throw、throws
1)try:用于监听。try语句块内放入被监听的代码,当代码块发生异常,异常会被抛出。
public class Main {
public static void main(String[] args) {
try {
int i = 10/0; //此处发生异常,之后的代码都不会被执行。
System.out.println("i="+i);
} catch (ArithmeticException e) {
System.out.println("Caught Exception");
System.out.println("e.getMessage(): " + e.getMessage());
System.out.println("e.toString(): " + e.toString());
System.out.println("e.printStackTrace():");
e.printStackTrace();
}
}
}
2)catch:用于捕获try语句块中发生的异常。
“int i = 10/0; ”发生异常之后,“System.out.println(“i=”+i);”并没有执行
Caught Exception
java.lang.ArithmeticException: / by zero
e.getMessage(): / by zero
at Main.main(Main.java:5) //说明第五行出现空指针异常
e.toString(): java.lang.ArithmeticException: / by zero
e.printStackTrace():
3)finally:该语句块总会被执行。
它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。