java异常与spring的事物
- java异常
throwable类是java.lang包,是java语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出
Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题(不用捕获)
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件(应该捕获)
- 出现异常时的处理方式:无论是系统异常还是抛出自定异常,最终都是需要自己处理的,不能抛给其他系统
①自己处理 try catch
②抛出 throws Exception
③抛出自定义异常 throw new xxxException(RuntimeException的子类)
抛出自定义异常
处理自己抛出的自定义异常
- 事物
特性:
①原子性:将多个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 设置遇到指定的异常类型进行回滚事物
生产应用:
配置:spring-datasource.xml