zoukankan      html  css  js  c++  java
  • Spring 中的事务处理

    一、事务业务描述

    事务是一个不可分割逻辑工作单元,是一个业务,事务的处理通常要结合业务进行落地的实现。进而更好保证业务的完整性(要么都成功,要么都失败)。

    二、Spring 中的事务控制

    Spring中的事务控制,推荐在业务层基于AOP方式进行实现,这样可以将事务逻辑与业务逻辑进行更好的解耦,同时可以重用事务逻辑代码.进而简化大量事务模板代码的编写.

    SpringBoot工程中的事务控制,可以直接在需要进行事务控制的类或业务方法上通过@Transaction注解描述即可,由此注解描述的方法为事务切入点方法,底层在切入点方法执行时会通过“通知方法”进行事务逻辑增强,示例代码如下:

    1 @Transactional
    2 public int updateObject(...){
    3    ....
    4 }

    当一个类中有个方法都需要事务控制,我们可以使用@Transactional注解对类进行描述,示例代码如下:

    1 @Transactional
    2 public class XxxServiceImpl implements XxxService{}

    二、Spring 中的事务属性分析

    在使用@Transactional描述类或方法时候,还可以指定一些事务属性,例如:

    1) readOnly 用于描述此事务是否为只读事务,默认值是false(表示不是只读事务),对于查询而言建议设置值为true.

    2) timeout 事务的超时时间,超过设置的时间会抛出异常,默认为-1(不超时,实际项目中建议设置超时时间)。

    3) rollbackFor 设置出现什么异常时要回滚事务(默认为RuntimeException)。

    4) isolation 设置事务并发执行时的隔离级别(隔离级别越高,数据正确性越好,但并发越差)。

    5)propagation 设置事务的传播特性(默认值为Propagation.REQUIRED),不同业务对象之间的方法出现相互调用时,事务的执行策略。REQUIRED表示参与到调用者的事务中去,其它选项自行查阅。

    案例分析:

    1 @Transactional(readOnly = false,
    2                rollbackFor = Throwable.class,
    3                isolation = Isolation.READ_COMMITTED,
    4                timeout = 5,
    5                propagation= Propagation.REQUIRED)
    6 public class XxxServiceImpl implements XxxService{}

    说明,假如类和方法上都定义了事务特性,那方法上定义的事务特性优先级比较高。

  • 相关阅读:
    Django项目总结:项目主页
    变量、常量和作用域
    mysql数据库连接
    多线程下的单例模式
    JVM笔记--类文件结构
    Java初始化与清理
    多线程设计模式-单线程执行模式
    Java语言实现冒泡排序算法
    继承父类并实现多个接口_hehe.base.10.3
    Servlet | Request 对象获取请求参数的通用方式
  • 原文地址:https://www.cnblogs.com/houyu/p/14284610.html
Copyright © 2011-2022 走看看