JavaWeb事务处理

首先我们来了解一下事务的四大特性(ACID):
1、原子性(Atomicity):
原子是不可分割的执行单元,要么一起执行,要么不执行
2、一致性(Consistency):
事务执行前后,数据的完整约束性不被破坏,典型的例子:银行转账
3、隔离性(Isolation):
事务之间完全独立,互不影响,但是在事务四大特性中,隔离性并不是严格意义上的隔离,数据库定义了四种隔离级别,隔离级别越高,数据越准确,相反的性能越低。
4、持久性(Durability):
事务执行完成之后,会持久保存,即使数据库崩溃,也不会丢失事务信息。

接下来我们看一下,在web开发环境中,如何重现不同隔离级别下出现并发的问题,以及如何解决,我们使用Thread.sleep的形式模拟事务的并发运行,并发问题包括:更新丢失、脏读、不可重复读、幻读。

一、更新丢失
事务A、B同时更新一行数据,事务B把事务A的更新给覆盖掉。数据库在没有加任何锁的情况下会发生,事实上,一般数据库(例如mysql)事务都会默认加锁,所以这种情况不会发生,了解一下即可。
问题重现:

事务A 事务B
start transaction;
start transaction;
update … where id = 1
update … where id = 1
commit
commit

当两个事务提交之后,事务A就相当于没有执行过一样,数据被事务B覆盖了,这种情况叫做更新丢失。

二、脏读
事务A的更新没commit之前,事务B读取到了事务A要提交的数据,此时事务A可能会回滚,导致事务B拿到错误的数据进行操作。
问题重现:
事务A:

@Transactional
public int updateUserPassWorld(Long id, String password) {
    User user = userMapper.findById(id);
    System.out.println("update before:"+user);
    int update =  userMapper.updateUserPassWorld(id,password);
    
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着信息产业的不断壮大,对软件的需求也越来越多,推动了软件开发行业的迅猛发展,团体开发软件已经是非常重要的软件开发手段,为了加强团体协作的高效性和对软件开发的同步和准确性,实现对软件开发过程的有效的管理和对开发事务的有效及时的处理,就需要一款适合软件开发团队协作使用的事务跟踪和管理系统。 系统主要基于.NET Framework的体系结构,应用ASP.NET开发技术以及C#语言和ADO.NET,实现了基于ASP.NET的事务跟踪系统,首先分析了团体开发软件时的协作中碰到的同步性、时效性等问题,分析并获取了本事务跟踪系统的原始需求,在设计系统时采用了表现层USL、业务逻辑层BLL、数据访问层DAL以及数据访问层接口IDAL的三层模型,另外采用了Log4net为系统的管理并记录日志。实现了对事务的及时跟踪,使得对信息的管理更加及时、高效,提高了工作效率,该系统的主要功能的功能有人员注册、密码修改及找回,项目的创建、人员配置、人员锁定解锁,任务的创建、状态修改、任务的搜索、关注,邮件提醒,以及后台线程对数据库的操作实现历史任务信息的自动存档功能。 系统布署上线以后运行良好,经过对使用者的使用调查,加入了任务留言时邮件提醒、新增了对任务类别的管理及搜索,使得系统有更好的用户体验。 关键词:ASP.NET,ADO.NET,C#,Log4net,IDAL,事务跟踪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值