Spring学习小结2

spring事务管理

一、简介:

事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用

事务的四个关键属性(ACID)

原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.

一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.

隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.

持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.

 

二、案例演示:

用以下的UML图示演示案例

(1)建BookShopDao接口


 

(2)用BookShopDaoIml类实现BookShopDao接口

 

(3)修改对应的配置文件

修改前:


 

修改后:

 

(4)创建测试类测试

4.1 测试查看

 

 

运行结果:

 

 

4.2 测试余额更新

 

 

运行前,用户表中的余额

 

 

运行结果:

 

(5)对于书的库存和账户余额,每个表中都是加了约束的

 

 

余额为60

执行测试余额更新函数后

 

                                                                

所以需要手工的把异常抛出

 

5.1 在包中创建两个对应的异常

BookStockException 主要是与书库存异常相关

UserAccountException 主要是与用户的余额异常相关

 

 

5.2 测试UserAccountException

 

 

 

 

mysql 不支持检查约束,所以自己创建

 

 

测试之前的库存为10 余额为160

 

 

但是这里出现的异常就是 执行了 testBookShopService() 函数后,因为余额不足会抛异常,同时库存不会减少,但是实际运行效果是抛出了异常但是库存任然减少

 

前面的都即基于注解的方式

 

添加事务注解后 执行了 testBookShopService() 函数后,因为余额不足会抛异常,同时库存不会减少

但是如果不添加事务注解的话 执行了 testBookShopService() 函数后 抛出了异常 但是 库存任然减少

 

实现以上功能的步骤

1、在配置文件中配置事务管理器

2、在配置文件中启用事务注解

3、在对应的方法上添加 @Transaction 比如该案例是关于余额不足的问题,则在对应的BookShopServiceIml() 函数中 添加 @Transaction

 

希望大家能给点写博客的指导和建议,不足之处还望大家指出、批评

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值