spring事物管理

简介: 事务认识所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销。Spring事务管理基于底层数据库本身的事务处理机制。数据库事务的基础,是掌握Spring事务管理的基础

事务认识

所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销。Spring事务管理基于底层数据库本身的事务处理机制。数据库事务的基础,是掌握Spring事务管理的基础

事务具备ACID四种特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。 

  • 原子性: 事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。
  • 一致性: 这表示数据库的引用完整性的一致性,表中唯一的主键等。
  • 隔离性: 可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
  • 持久性: 一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

Spring 声明式事务管理

所谓声明式事务,就是通过配置的方式省去很多代码,从而让Spring来帮你管理事务。本质上就是配置一个Around方式的AOP,在执行方法之前,用TransactionInterceptor截取,然后调用PlatformTransactionManager的某个实现做一些事务开始前的事情,然后在方法执行后,调用PlatformTransactionManager的某个实现做commit或rollback。

  • 我们使用标签,它创建一个事务处理的建议,同时,我们定义一个匹配所有方法的切入点,我们希望这些方法是事务型的并且会引用事务型的建议。
  • 如果在事务型配置中包含了一个方法的名称,那么创建的建议在调用方法之前就会在事务中开始进行。
  • 目标方法会在 try / catch 块中执行。
  • 如果方法正常结束,AOP 建议会成功的提交事务,否则它执行回滚操作

使用XML进行配置事务管理器

利用aop的思想,将需要事务管理的业务方法通过xml配置的方式,将事务管理加在该类的相关方法上。这种方法的优点是,一次xml配置,后期不用关心业务类增加或者减少,通过xml中配置的匹配信息,会去找业务类所在的包和方法,然后加上事务。重点是配置tx:adviceaop:config上。

示例:

<!--  spring transaction aspectj xml -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="transfer" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut expression="execution(* com.xxx.springtransaction.service..*(..))"
           id="pointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
    </aop:config>

基于注解的方式: @Transactional

事物传播行为介绍:

  •   @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
  •   @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务
  •   @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
  •   @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常
  •   @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
  •   @Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. 示例
@Transactional
public class AccountServiceImpl implements AccountService {
    private AccountDao accountDao;
    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }
    @Override
    public void transfer(String out, String in, Double money) { 
        accountDao.transferOut(out, money);
        //int i = 1/0;
        //System.out.println(i);
        accountDao.transferIn(in, money);
    }
}

对于spring事务管理而言,如果是springmvc的项目,倾向于使用xml配置的方式,如果是springboot了,只能使用注解的方式。



相关文章
|
Java Spring 安全
你了解Spring事物控制特性吗
一.事务特性原子性:强调事务的不可分割一致性:强调的是事务的执行的前后,数据的完整性要保持一致隔离性:一个事务的执行不应该受到其他事务的干扰持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库 二.如果不考虑隔离性,会引发一些安全性问题读问题脏读:一个事务读到另一个事务还没有提交的数据不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致 写问题引发两类丢失更新 三.解决引发的读问题设置事务的隔离级别read uncommitted :未提交读。
918 0
|
Java 数据库连接 Spring
spring 注解试事物源码解析
spring 注解试事物源码解析 基于xml注解式事务入口 public class TxNamespaceHandler extends NamespaceHandlerSupport { static final String TRANSACTION_MANAGER_ATTR...
5942 0
|
SQL XML Java
SSM-Spring-21:Spring中事物的使用案例
   ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     股票买卖案例(我会用三种开启事物的方法 代理工厂bean版的,注解版的,aspectj xml版的)   简单的介绍一下这个小例子,就是俩个表,一个就是你的账户表,一张就是你的股票...
1026 0
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
187 2
|
4月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
21天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
31 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
17天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
30 2