zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    python scrapy爬取前程无忧招聘信息
    scrf 原理及flask-wtf防护
    Django 惰性机制
    Django 中配置MySQL数据库
    Django的安装命令
    python装饰器
    python面向对象之继承
    OSI七层模型
    面向对象
    python函数
  • 原文地址:https://www.cnblogs.com/lixiangang/p/9905905.html
Copyright © 2011-2022 走看看