java事务的概念浅析

 更新时间:2020年12月01日 16:17:19   投稿:laozhang  
在本篇内容里小编给大家整理的是一篇关于java事务的概念浅析,有兴趣的朋友们可以参考学习下。

事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。

1、事务的特性

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。

原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。比如A向B转账1000元,那么这就一定要保证原子性(要么同时成功,要么同时失败)。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。比如A向B转账,不可能A扣了钱,B却没收到(这就是非一致性)。

隔离性(isolation):一个事务的执行不能被其他事务所影响。比如A和C同时向B转账,那B同一时间只能和一个人交易(同时只能有一个交易在执行)。

持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。A向B转账,成功以后B的账户就存入了转账数额,在不做其他的操作前提下数据是永久性的。

2、事务的隔离级别

串行化,Serializable,一个事务在执行过程中完全看不到其他事务对数据库所做的更新。

可重复读,Repeatable Read,一个事务在执行过程中可以看到其他事务已经提交的记录,但是不能看到其他事务对已有记录的更新。

读已提交数据,Read Commited,一个事务在执行过程中可以看到其他事务已经提交的记录,而且能看到其他事务对已有记录的更新。

读未提交数据,Read UnCommited,一个事务在执行过程中可以看到其他事务没有提交的记录,而且能看到其他事务没有提交的记录的更新。

隔离级别越高,越能保证数据的完整性和一致性,但对高并发性能影响也越大,故需要合理选择。

3、Java中的事务处理

一般情况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务、容器管理事务。一般情况下,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。

到此这篇关于java事务的概念浅析的文章就介绍到这了,更多相关java里面有事务的概念吗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot整合jsp及设置启动页面的方法

    spring boot整合jsp及设置启动页面的方法

    这篇文章主要给大家介绍了关于spring boot整合jsp及设置启动页面的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • JAVA生成xml文件简单示例

    JAVA生成xml文件简单示例

    这篇文章主要介绍了JAVA生成xml文件的相关资料,在Java中可以使用DOM或者JDOM来生成XML文件,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 使用Java实现获取文件MD5值工具类

    使用Java实现获取文件MD5值工具类

    我们在工作中通常使用MD5对文件进行校验完整性,比较,提高安全性等,这篇文章主要为大家详细介绍了Java如何编写一个实现获取文件MD5值的工具,需要的可以参考下
    2023-12-12
  • Java修改maven的默认jdk版本为1.7的方法

    Java修改maven的默认jdk版本为1.7的方法

    这篇文章主要介绍了Java修改maven的默认jdk版本为1.7的方法,需要的朋友可以参考下
    2018-02-02
  • 详解Spring DeferredResult异步操作使用场景

    详解Spring DeferredResult异步操作使用场景

    本文主要介绍了Spring DeferredResult异步操作使用场景,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • PL/SQL实现JAVA中的split()方法的例子

    PL/SQL实现JAVA中的split()方法的例子

    这篇文章主要介绍了PL/SQL实现JAVA中的split()方法的例子的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Spring获取当前类在容器中的beanname实现思路

    Spring获取当前类在容器中的beanname实现思路

    这篇文章主要介绍了Spring获取当前类在容器中的beanname,实现思路只需继承BeanNameAware接口,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 如何使用IDEA 搭建 SpringCloud 项目

    如何使用IDEA 搭建 SpringCloud 项目

    所谓微服务,就是要把整个业务模块拆分成多个各司其职的小模块,做到单一职责原则,不会重复开发相同的业务代码,实现真正意义上的高内聚、低耦合,这篇文章主要介绍了如何使用IDEA 搭建 SpringCloud 项目,需要的朋友可以参考下
    2023-11-11
  • Java使用SFTP上传文件到服务器的简单使用

    Java使用SFTP上传文件到服务器的简单使用

    这篇文章主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • MyBatis详细讲解DAO代理的使用

    MyBatis详细讲解DAO代理的使用

    MyBatis允许只声明一个dao接口,而无需写dao实现类的方式实现数据库操作。前提是必须保证Mapper文件中的<mapper>标签的namespace属性值必须要和dao接口的类路径一致,MyBatis容器会自动通过动态代理生成接口的实现类
    2022-04-04

最新评论