zoukankan      html  css  js  c++  java
  • Spring事务隔离级别、传播机制、实现方式

      Spring时使用AOP来代理事务控制,针对接口和类,所以在同一个service类的两个方法的调用,传播机制不生效。

    一、Spring事务隔离级别

      1. ISOLATION_DEFAULT:  默认的隔离级别,使用数据库默认的事务隔离级别。

      2. ISOLATION_READ_UNCOMMITTED: 未提交读,允许一个事务读取另外一个事务未提交的数据,或造成脏读、幻读、不可重复读。

      3. ISOLATION_COMMITTED: 提交读,保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。防止脏读。

      4. ISOLATION_RETETABLE_READ: 可重复读,可以防止脏读、不可重复读,但是还会造成幻读。

      5. ISOLATION_SERIALIZABLE: 串行事务,事务串行执行,防止脏读、不可重复读、幻读。

    二、Spring事务传播机制--参考链接--

      (需要事务加入)

      1. REQUIRED: 如果当前有事务就加入事务,如果没有事务则创建一个新的。

      2. REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

      (嵌套事务)

      3. NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。如果没有事务,相当于REQUIRED。

      (支持,如果有就支持,如果没有就算了)

      4.SUPPORTS: 如果当前存在事务,则加入该事务。如果当前没有事务,则以非事务的方式进行。

      (不支持)

      5. NOT_SUPPORTS: 以非事务方式运行。如果当前有事务,则把当前事务挂起。

      (强制性的,一定要有,没有就抛异常)

      6. MANDATORY:如果当前存在事务,则运行在当前事务中。如果没有事务,则抛出异常。

      (从不,比NOT_SUPPORT更硬,直接异常)

      7. NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务。

    三、实现方式

      1. 声明式事务:@Transactional(propagation = Propagation.REQUIRED)

      2. AOP实现事务

    <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dateSource"></property>
    </bean>
    <tx:advice id="stockAdvice" transaction-manager="dataSourceTransactionManager"> <tx:attributes> <tx:method name="by*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="MyExepction"/> <tx:method name="select*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"></tx:method> </tx:attributes
    </tx:advice>
    <aop:config> <aop:pointcut id="exAdvice" expression="execution(* *..service.*.*(..))"></aop:pointcut> <aop:advisor advice-ref="stockAdvice" pointcut-ref="exAdvice"></aop:advisor> </aop:config>

      3. 事务代理工程Bean实现事务

    <bean id="tproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="dataSourceTransactionManager"></property>&lt;!&ndash;写的是事务&ndash;&gt;
        <property name="target" ref="byStockService"></property>&lt;!&ndash;要进行事务的类&ndash;&gt;
       <property name="transactionAttributes">
        <props>//key写的是service层要增强的方法 事务的隔离级别,后面逗号后面是异常类,用于回滚数据&ndash;&gt;
              <prop key="ByStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-MyExepction</prop>
          </props>
       </property>
    </bean>
  • 相关阅读:
    python爬虫(十六) -IndexError: list index out of range
    python爬虫(十五) 豆瓣电影爬虫
    python爬虫(十四)
    python爬虫(十三) lxml模块
    python爬虫(十二) XPath语法
    python爬虫(十一) session
    python爬虫(十) requests使用代理ip
    python爬虫(九) requests库之post请求
    python爬虫(八) requests库之 get请求
    PXE+kickstart网络安装CentOS7.4系统及过程中各种报错
  • 原文地址:https://www.cnblogs.com/qmillet/p/12522613.html
Copyright © 2011-2022 走看看