Spring(六)【事务】

Spring的事务处理

  1)接口:

    事务管理器是PlatformTransactionManager接口,在接口定义了事务的主要方法:commit()事务提交;rollback()事务回滚

    事务管理接口的实现类包括:

      1.1)DataSourceTransactionManager:在使用JDBC或者MyBatis访问数据库时使用

          在Spring中创建DataSourceTransactionManager对象:

          <bean id="dataSource" class="包名.DataSourceTransactionManager">

            <指定数据源myDataSource>

          </bean>

      1.2)HibernateTransactionManager:使用Hibernate框架时,使用的实现类

 

  2)事务定义接口:TransactionDefinition

    TransactionDefinition作用是定义了控制和管理事务的一些常量值,通过常量值可以指定事务的属性

      2.1)事务的隔离级别:

          DEFAULT:采用DB默认的事务隔离级别,mysql的默认为REPEATABLE_READ;Oracle的默认为READ_COMMITTED

          READ_UNCOMMITTED:读未提交,未解决任何并发问题

          READ_COMMITTED:读已提交,解决脏读,存在不可重复读与幻读

          REPEATALBLE_READ:可重复读,解决脏读、不可重复读,存在幻读

          SERIALIZABLE:串行化,不存在并发问题

      2.2)事务的超时:

          超时:指事务的最长执行时间,也就是一个方法最长的执行时间(可以是数据库的执行时间,也可以是方法执行时间),时间到代码仍没有执行结束,Spring则会回滚。

          超时的单位为秒,默认值是-1,使用数据库自己的默认时间

      2.3)事务的传播行为:

          事务在方法之间传递,通过传播行为指定方法怎么使用事务,共有七种传播行为:

          2.3.1)PROPAGATION_REQUIRED

          2.3.2)PROPAGATION_REQUIRES_NEW

          2.3.3)PROPAGATION_SUPPORTS

          2.3.4)PROPAGATION_MANDATORY

          2.3.5)PROPAGATION_NESTED

          2.3.6)PROPAGATION_NEVER

          2.3.7)PROPAGATION_NOT_SUPPORTED

      2.4)事务的回滚方式:

          Spring事务的默认回滚方式是:发生运行时异常和error时回滚,发生受查(编译)异常时提交。不过,对于受查异常,程序员也可以手工设置其回滚方式

 

 

使用Spring的事务注解管理事务

  通过@Transactional注解方式,可将事务织入到相应public方法中,实现事务管理

  @Transactional可选的属性包括:

    1)propagation:用于设置事务传播属性,默认值为Propagation.REQUIRED

    2)isolation:用于设置事务的隔离级别,默认值为Isolation.DEFAULT

    3)readOnly:用于设置该方法对数据库的操作是否是只读的,类型为boolean,默认值为false

    4)timeout:用于设置本操作与数据库连接的超时时限,单位为秒,类型为int,默认值为-1,即没有时限

    5)rollbackFor:指定需要回滚的异常,类型为Class[],默认值为空数组,如果只有一个异常类时,可以不使用数组

    6)rollbackForClassName:指定需要回滚的异常类类名,类型为String[],默认值为空数组

    7)noRollbackFor:指定不需要回滚的异常,其他同上

    8)noRollbackForClassName:指定不需要回滚的异常类类名

 

注意:@Transactional若用在方法上,只能用于public方法上,其他非public方法如果加了注解,不会报错,但是Spring会忽略该注解。若@Transactional加在类上,则表示该类所有的方法均在执行时会织入事务

 


实现注解的事务步骤:

  1)声明事务管理器

  2)启动注解驱动

  3)编写事务注解

 

 

声明式的事务管理:

  在Spring的配置文件中,使用aspectj实现事务的管理,能够完全和源代码解耦合

 

步骤:

  1)加入aspectj的依赖

  2)在Spring的配置文件中

    2.1)声明事务管理器(和注解实现事务一样)

    2.2)声明事务通知(指定业务方法的事务属性)

    2.3)配置aop,指定切入点,把通知和切入点连接起来

 

posted @ 2020-05-07 01:27  Rhettttt  阅读(152)  评论(0)    收藏  举报