Spring的事务

事务操作的概念

什么是事务?

事务是数据库操作最基本单元,逻辑上的一组操作,要么都成功,如果有一个失败所有操作都失败

典型场景:银行转账

小明转账100给小虎

小明少100 小虎多一百 

事务四个特性(ACID特性)

(1) 原子性

不可分割  一个失败所有都失败

(2) 一致性

操作之前和操作之后总量不变

(3) 隔离性

多事务操作他们之间不会产生影响

(4) 持久性

事务提交之后  对数据库的修改是永远的

搭建实务操作环境

1 创建数据库表,添加记录

2创建Service dao完成对象创建和注入属性

(1)service注入dao  在dao中注入jdbcTemplate  在jdbcRemplate注入DataSourse

3 再dao创建两个方法,多钱和少钱得方法,在service创建方法(转账得方法)

如果有异常  怎么解决?那么就用到了事务

事务操作过程

 public void accountMoney(){
        try {
//          第一步  开启事务
//       第二步骤   进行业务操作
            userDao.reduceMoney();
            userDao.addMoney();
//            第三步  没有发生异常,提交事务
        }catch (Exception e){
//            第四步 出现异常 事务回滚
        }

    }

Spring事务管理介绍

1 事务添加到JavaEE三层接口里面Service层(业务逻辑层)

2 在spring进行事务管理操作

(1)有两种方式  编程式事务管理 和声明式事务管理

 3 声明式事务管理

(1) 基于注解方式

(2)基于xml配置文件方式

4  在Spring进行声明式事务管理,底层使用AOP原理

5  Spring事务管理API

(1) 提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类

 注解声明式事务管理

1  在spring配置文件配置事务管理器

<!--    创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--        注入数据源-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2 在spring配置文件 开启事务注解

1  在spring配置文件引入名称空间tx

2 开启事务注解

<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

3在service类上面或者类里面方法上面  添加事务注解

(1)@Transactional  这个注解添加到类上面,也可以添加到方法上面

(2)如果把这注解添加到类上面,这个类里面所有方法都添加事务

(3) 如果把这个注解添加到方法上面  为这个方法添加事务

你的业务方法需要什么样的事务?说明需要事务的类型

说明方法需要的事务

1 事务的隔离级别  

事务的隔离级别是方法在高并发情况下对数据安全性的控制

2 事务的超时时间,表示一个方法最长的执行时间,如果方法执行超过了时间,事务就回滚

单位是秒   整数值  默认是-1

3 事务的传播行为  控制业务的方法是不是有事务的  是什么样的事务

7个传播行为 表示你的业务方法调用时,事务在方法之间是如何使用的

Spring提交事务,回滚事务的时机

1当你的业务方法执行成功 没有异常抛出   当方法执行完毕  spring在方法执行后提交事务

2当你的业务方法抛出运行时异常或error,spring执行回滚,  会调用事务管理器的rollback

运行是异常的定义:runtimeException 和其他的子类都是运行时异常

3放你的业务方法抛出的非运行时异常  只要是受查异常 提交事务

受查异常  在写代码中  必须处理的异常    例如IOException  SQLException

@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = -1, readOnly = false, rollbackFor = Exception.class)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值