• 事务


    声明式事务的五大属性

    1.传播机制(propagation)

    指的是一个带有事务的方法A运行在另一个带有事务的方法B内部时,内层方法A是使用自己的事务还 是使用外层B的事务

    required:默认值,表示如果外层方法B有事务,就使用外层方法B的事务,没有就使用自己的事务

    requires_new:无论外层方法B有没有事务,内层方法A都使用自己的事务

    supports:表示如果外层方法B有事务,就使用外层方法B的事务,如果外层方法B没有事务,就不使用事务

    2.隔离级别(isolation):是针对数据库的并发访问的,不同的隔离级别,数据库有着不同的解决方法。

    repeatable_read: 默认是 可重复度

    read_uncommitted:读未提交

    read_committed:读已提交

    serializable:串行化读:就是如果设置了这个注解,运行期间就不允许改变值 也就是不允许并发操作。

    3.回滚机制  通常只有运行时异常会自动回滚,编译时异常不会回滚,想要让其回滚只有设置rollbackFor

     rollbackFor  ={一个异常类的字节码}  就是在事务后面的参数列表里面加上 一个异常类的字节码,当你下面遇到这样的异常时 会回滚

    no rollbackFor 就是即使是运行时异常,后面如果不想让其回滚,就在事务后加上norollbackFor={运行时异常的类字节码} 下面遇见这种类型的异常就不会自动回滚。

    SQLException:本属于编译时异常,但是在遇见spring框架的时候底层被SQLErrorCodeSQLEceptionTranslator重写编译编 转化成了运行时异常  在遇见sqlException异常的时候也会自动回滚。

    4.超时属性

    :::.事务在数据库执行过程中,势必要消耗数据库的资源,如果让一个事务长期执行,就会影响其他事物的执行,所以一旦一个事务在指定的时间内还没有完成操作就让它回滚。

    5.只读属性

    readOnly = true  表示 只允许对数据库进行查询读取操作,不能对数据进行增 删 改 操作。

    二、配置事务 两种方式

    1.基于注解的方式:

      注意:不管是基于注解还是xml 都需要先配置事务源

       事务源!

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    这种基于注解的方式:

    <!-- 一、注解的方式配置事务-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

    然后在service层类或者方法上加上一个事务注解

    
    
    @Transactional
    
    

    第二种:基于xml的方式:只需要在配置文件中配置即可。

     1 <!--二、基于xml的方式配置事务-->
     2      <!--配置事务的通知-->
     3     <tx:advice id="interceptor" >
     4         <tx:attributes>
     5             <tx:method name="save*" propagation="REQUIRED"/>
     6             <tx:method name="find*" propagation="REQUIRED"/>
     7             <tx:method name="delete*" propagation="REQUIRED"/>
     8             <tx:method name="select*" read-only="true"/>
     9             <!--所有方法都适应,全局搜索-->
    10             <tx:method name="*" read-only="true"/>
    11         </tx:attributes>
    12     </tx:advice>
    13     <!--配置切面-->
    14     <aop:config>
    15         <aop:pointcut id="pointcut" expression="execution(* com.ujy.service.impl.*.*(..))"/>
    16         <!--把切入点和通知类组织到一起成切面-->
    17         <aop:advisor advice-ref="interceptor" pointcut-ref="pointcut"/>
    18     </aop:config>
     
  • 相关阅读:
    jquery之empty()与remove()区别
    (四)快速排序
    (三)归并排序
    (二)希尔排序
    (一)冒泡排序、插入排序、选择排序
    四,JVM 自带工具之jvisualvm
    JAVA多线程之Volatiles
    JAVA多线程之线程池的使用
    CountDownLatch与CyclicBarrier的使用与区别
    乐观锁与悲观锁及其实现
  • 原文地址:https://www.cnblogs.com/ych961107/p/11830587.html
Copyright © 2020-2023  润新知