java监听mysql事务_java操作数据库的事务支持

本文介绍了在Java中如何监听和管理MySQL事务,强调事务的ACID特性,并提供了通过数据库控制和Java代码实现事务的示例。重点讨论了通过ThreadLocal在Java中维持事务上下文的方法,以及在业务层进行事务控制的策略。
摘要由CSDN通过智能技术生成

一、需求背景:

我们生活经常遇到一个情况:在购买商品的时候,已经支付的了,那么商品应该处于已购买订单里。而不是付款之后,已购买商品没有。

还有转账的时候,转出方和转入方都需要扣减相应的金额,而不是一方减少或者增加。

因为上面的例子都是对数据操作,所以需要我们操作数据库的事务。

如何确定一个事务范围?

事务是由一系列数据库操作组成,他和业务场景有关。当操作完成的时候,如果操作过程没有出现失败,则这个事务产生的数据库操作一并提交(commit)。反之,如果出现失败,则一并回滚(rollback)。

所有事务和业务层(service)确定。

事务的特点:

ACID

1、原子性:事务里面的操作单元不可切割,要么全部成功,要么全部失败

2、一致性:事务执行前后,业务状态和其他业务状态保持一致.

3、隔离性:一个事务执行的时候最好不要受到其他事务的影响

4、持久性:一旦事务提交或者回滚.这个状态都要持久化到数据库中

不考虑隔离性会出现的读问题:

脏读:在一个事务中读取到另一个事务没有提交的数据

不可重复读:在一个事务中,两次查询的结果不一致(针对的update操作)

虚读(幻读):在一个事务中,两次查询的结果不一致(针对的insert操作)

通过设置数据库的隔离级别来避免上面的问题(理解)

read uncommitted      读未提交    上面的三个问题都会出现

read committed      读已提交    可以避免脏读的发生

repeatable read        可重复读    可以避免脏读和不可重复读的发

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值