Spring——事务

Spring事务

事务的ACID特性

原子性(Atomicity):在事务中的操作,要么都执行,要么都不执行!

一致性(Consistency):数据从一种状态,同时到达另一种状态。

持久性(Durability):数据一旦提交,对数据库的影响是永久的。

隔离性(Isolation):事务之间是相互独立存在的。

 

事务创建的原则:

  1. 事务尽可能简短:

因为启动事务之后,数据库管理系统需要保留大量资源来保证事务的ACID!

          如果是多用户的系统,那么回严重影响系统的性能。

  1. 事务中访问的数据量小:

          在并发情况下,执行事务,事务的访问量尽量小,各个线程之间对数据的争夺就越小。

  1. 查询时尽量不使用事务:

          因为查询不会修改数据。

  1. 在事务处理过程中,尽量不要出现用户等待的情况!

          如果等待时间过长,占用资源太久,有可能会造成系统阻塞!(可以设置事务的超时时间)

 

    

 

Spring事务的管理实现

01.使用spring的事务工厂

02.使用spring的注解    (常用)

03.使用aspectJ AOP配置         (常用)

 

Spring事务中两个属性

Isolation :事务的隔离级别

      01. default :采用数据库默认的事务隔离级别

                Mysql :repeatable-read (可重复读)

                Oracle :read-committed(读提交)

      02. repeatable-read(可重复读):解决了脏读和不可重复读,但是可能发生幻读。

      03. read-committed(读提交);解决了脏读,但是没有解决不可重复读和幻读。

      04. read-uncommitted(读未提交):什么问题都没解决,最垃圾

      05. serializable (串行化):级别最高,效率最低,彻底解决并发的问题。

 

propagation: 事务的传播行为:一共7中方式!

          01.required:是spring默认的事务传播行为!

                指定的方法必须在事务中执行!如果没有事务,则会自动创建一个事务!

          02.supports:有事务就在事务环境下执行,没有事务就直接执行!

          03.mandatory:指定的方法必须在事务中执行!如果没有事务,则抛出异常!       

          04.requires_new:总是新创建一个事务!

               如果当前方法存在事务,则把当前的事务挂起,直到新创建的事务执行完毕后执行!

          05.not_supported:指定的方法不能在事务中执行!如果当前方法存在事务,则把当前的事务挂起!

          06.never:指定的方法不能在事务中执行!如果当前方法存在事务,则抛出异常!

          07.nested:指定的方法必须在事务内执行!

               如果执行的方法没有事务,则会创建一个事务!

               如果执行的方法没有事务,则会嵌套执行!

         

    timeout_default:定义了事务默认的超时时间!

         

    Spring事务管理的接口:PlatformTransactionManager

           常用的两个实现类:

           01.使用jdbc和MyBatis时     使用DataSourceTrancationManager

           02.使用hibernate时              使用HibernateTrancationManager

         

    Spring事务回滚的方式:

           默认的回滚方式--》发生运行时异常回滚!发送受查异常时提交!

           受查异常肯定需要我们手动的设置回滚方式!

           运行时异常严重!一旦发生,JVM中止执行!

           

          实现自定义异常类!RuntimeException -->  Exception --->  Throwable

 

 

posted @ 2018-11-04 21:17  徒手攀岩  阅读(164)  评论(0编辑  收藏  举报