专栏首页Java学习网Java项目实践,数据访问层事务控制方法总结,保障数据安全

Java项目实践,数据访问层事务控制方法总结,保障数据安全

为什么需要事务?

事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问,比如,银行转帐业务,账户A要将自己账户上的1000元转到B账户下面,A账户余额首先要减去1000元,然后B账户要增加1000元。假如在中间网络出现了问题,A账户减去1000元已经结束,B因为网络中断而操作失败,那么整个业务失败,必须做出控制,要求A账户转帐业务撤销。

这才能保证业务的正确性,完成这个操作就需要事务,将A账户资金减少和B账户资金增加放到一个事务里面,要么全部执行成功,要么操作全部撤销,这样就保持了数据的安全性。

java中的事务主要有两种,JDBC事务(本地事物)和JTA(Java Transaction API)事务(分布式事物);

事务有四大特性ACID原子性、一致性、隔离性和持久性。

框架中,我们一般把事物交给spring来管理。spring配置事务的方式一般有两种,一个是声明式事务,一个是注解式事务。

注解事务,比较简单灵活,在spring配置文件中配置一个<tx:annotation-driven>的注解,然后在需要的方法上加@Transactional注解就可以了。

声明式事务,切点一般是扫描service层实现类,通过方法名匹配配置传播特性,决定哪些方法上加事务,哪些不需要事物。

事务主要有五大隔离级别和7种传播特性;五大隔离级别由低到高:主要控制是否出现脏读,不可重复读和幻觉读;7种传播特性主要决定是新建事务,还是取当前事务;

1、脏读:

指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中, 这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的 数据, 那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确 的。

2、不可重复读:

指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一 数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务 两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的, 因此称为是不可重复读。

3、幻觉读:

幻觉读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行 了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这 种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有 没有修改的数据行,就好像发生了幻觉一样。

事务主要是为了保证一次操作里边涉及到多次增删改时,保证他们可以同步提交或回滚。他有四大特性ACID(原子性、一致性、隔离性、持久性)

1. 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。

2. 一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。如果在执行过程中发生错误,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这是数据库就处于不一致状态。

3. 隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。

4. 持续性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

以上,是我做项目过程对事务的一些认识,在这里记录下来,帮助有同样需求的小伙伴们,有不同看法可以评论区交流。

我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。

本文分享自微信公众号 - Java学习网(javalearns),作者:javalearns

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解 Spring 事务原理

    深入理解 Spring 事务原理 一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。...

    用户1289394
  • MySQL 存储引擎 MyISAM 与 InnoDB 区别

    存储引擎 Storage engine:MySQL 中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    用户1289394
  • 提升网站转化率的四步优化方案

      网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。本文转自月光博客,文中分享了四大优化策略:...

    用户1289394
  • Spring详解--一篇文章让你弄懂spring事物管理

      事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

    Java编程指南
  • 一文搞懂什么是事务

    我们要理解下事务概念:什么是事务呢?事务是并发控制的单位,是用户定义的一个操作序列。有四个特性(ACID):

    Java宝典
  • [spring事务]一篇浅文让你摆脱事务困扰

    原子性(Atomicity):事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生

    星尘的一个朋友
  • 关系型数据库的ACID(原子性、一致性、隔离性与持久性)

    Coxhuang
  • spring事物

    用户1637228
  • 逐行阅读Spring5.X源码(十三)spring事务源码分析

    spring并不直接管理事务,而是提供了多种事务管理器,他们将事务的管理职责委托给Hibernate或JTA等持久化机制所提供的相关平台框架的事务来实现。通过这...

    源码之路
  • spring事务传播特性

    通过上面对事物的说明,有编程经验的人应该都很清楚为什么需要失误了吧?那就是为了防止出现业务逻辑上的出错,如算错账转错钱等。

    居士

扫码关注云+社区

领取腾讯云代金券