java异常与spring的事物

  • java异常

throwable类是java.lang包,是java语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出

java异常与spring的事物

Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题(不用捕获)

Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件(应该捕获)

  • 出现异常时的处理方式:无论是系统异常还是抛出自定异常,最终都是需要自己处理的,不能抛给其他系统

①自己处理 try catch

java异常与spring的事物

②抛出 throws Exception

③抛出自定义异常 throw new xxxException(RuntimeException的子类)

抛出自定义异常

java异常与spring的事物

处理自己抛出的自定义异常

java异常与spring的事物

  • 事物

特性:

①原子性:将多个sql作为一个整体,不可分割

②一致性:数据操作的结果应该与业务逻辑保证一致

③隔离性:多个事物并发操作同一数据时,保证事物间的数据时隔离开的,互不干扰

④持久性:事物操作的结果,会永久的保存到存储器中

隔离级别 :

①int TRANSACTION_READ_UNCOMMITTED = 1;  未提交读:一个事物读取到了另一个事物没有提交的数据,如果另一个事物回滚了,就会造成脏读问题

②int TRANSACTION_READ_COMMITTED   = 2;  已提交读:一个事物处理过程中读取到了另一个事物已提交的数据,可能找出前后读取数据不一致的情况,即不可重复度问题

③int TRANSACTION_REPEATABLE_READ  = 4; 重复读:一个事物只能读取到当前事物的操作数据,不能读取到别的事物未提交和已提交的数据

④int TRANSACTION_SERIALIZABLE     = 8; 序列化/不可并发

数据库默认的隔离级别:

mysql  4,oracle 2

事物的传播行为:

方法被调用时,事物的开启方式,一共有7个传播行为

①propagation=Propagation.REQUIRED 默认值:表示一个方法被调用时,如果已经存在一个事物中则加入这个事物,否则开启一个新事物

②propagation=Propagation.REQUIRED_NEW :表示一个方法被调用时,不管调用的方法是否存在事物,被调用方法总会开启一个新事物

事物的回滚策略:

①RuntimeException: 运行时异常,不需要进行try catch 处理,由JVM处理

②Exception:编译期异常和error不进行回滚

③可通过rollbackFor=Exception.class 设置遇到指定的异常类型进行回滚事物

生产应用:

java异常与spring的事物

配置:spring-datasource.xml

java异常与spring的事物