java事务_Java 事务详解[通俗易懂]

java事务_Java 事务详解[通俗易懂]一、事务(1)事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。(2)事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity)。一个事务是一个不可分割的工作单位。比如A向B转账1000元,那么这就一定要保证原子性(要么同时成功,要么同时失败)。一致性…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、事务

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

(2)事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位。比如A向B转账1000元,那么这就一定要保证原子性(要么同时成功,要么同时失败)。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。比如A向B转账,不可能A扣了钱,B却没收到(这就是非一致性)。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。比如A和C同时向B转账,那B同一时间只能和一个人交易(同时只能有一个交易在执行)。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。A向B转账,成功以后B的账户就存入了转账数额,在不做其他的操作前提下数据是永久性的。

二、Hibernate事务处理

(1)Hibernate事务处理

在Hibernate框架中,使用Transaction接口来维护了事务实现(JTA,JDBC)的抽象。

事务与Session相关联,并通过调用session.beginTransaction()实例化。

Transaction接口的方法如下:

void begin() 开始一个新的事务。

void commit() 结束工作单位,在FlushMode.NEVER中除外。

void rollback() 强制此事务回滚。

void setTimeout(int seconds) 它为由此实例开始的后续调用启动的任何事务设置事务超时。

boolean isAlive() 检查交易是否仍然存在。

void registerSynchronization(Synchronization s) 为此事务注册用户同步回调。

boolean wasCommited() 检查事务是否成功提交。

boolean wasRolledBack() 检查事务是否成功回滚。

(2)Hibernate事务绑定

Hibernate使用本地线程绑定事务(所以不能在一个线程中启动多个线程去操作不同的数据工作),当请求Service方法时打开通过Soring AOP 自动打开 Hibernate Session,启动事务,执行所有与数据相关的工作,结束事务并关闭Session。模式的关键是交易与交易之间的一对一关系 Session。

例子:

public Integer save(One one,Tow tow) {

oneDao.save(one);

towDao.save(tow);

return 1;

}

三、分布式事务

(1)JTA

在应用系统数据量越来越大时,系统数据就需要分布在不同的数据库中,当业务需求在多个数据库中做原子性操作时就可以选择JTA (Java Transaction API),JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

(2)JTA原理

不同的数据库有不同的数据库供应商,JTA就是将这个不同的数据库管理起来,统一创建一个原子事务,全部成功即成功,一个不成功就回滚所有的操作(JTA还是较重量级)

(3)实例

Spring有很多的JTA框架,这里使用的是atomikos框架,具体代码请点击链接查看

四、分布式消息最终一致性事务

(1)最终一致性

当应用系统数据越来越庞大,最终数据的一致性成为了一个很好的解决方案,即能即时响应,又能很好的完成多个数据操作(但不能保证一定成功,可能过了一段时间最终却没有成功)。

(2)实现原理

当应用收到请求,应用会先将用户请求的数据保存到分布式消息中间件中,做一个保存操作。保存成功后就给用户返回提交成功信息。接着分布式消息中间件将请求在发送到不同的处理机器上,处理机器收到消息在进行业务处理。比如A给B转账,A先提交转账信息(已经扣款),然后消息被发送的分布式消息中间件上,消息中间件在发送到处理机器上面做处理,转账成功后则在给用户发送转账成功信息,不成功则把款退回去。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182538.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 永久免费的ssl证书哪里申请_免费永久证书

    永久免费的ssl证书哪里申请_免费永久证书1、阿里云推荐指数:★★☆☆☆免费证书类型:DV域名型免费证书品牌:DigiCert(原赛门铁克(Symantec))免费通配符证书:不支持易操作性:简单证书有效期:1年自动更新:不支持自动部署:不支持优点:有效期长阿里云仅提供免费的单域名HTTPS证书,如果你仅只需要一个单域名的证书,可以使用阿里云的免费证书,毕竟DigiCert是大品牌,值得信赖。在证书即将到期前,需要再次手动申请证书,不支持自动化申请和部署。申请链接:https://common-buy.aliyun.c

    2022年10月1日
    3
  • java 堆栈的声明_Java 堆栈[通俗易懂]

    java 堆栈的声明_Java 堆栈[通俗易懂]Java堆栈堆栈是一种线性数据结构,用于存储对象的集合。它基于先进先出(LIFO)。Java集合框架提供了许多接口和类来存储对象的集合。其中之一是Stack类,它提供了不同的操作,例如推,弹出,搜索等。在本节中,我们将讨论JavaStack类,其方法和实现在Java中的堆栈数据结构程序。但是在转到JavaStack类之前,请先快速了解堆栈的工作原理。堆栈数据结构具有两个最重要的操作,分别…

    2022年7月7日
    21
  • KRACK破解Wi-Fi WPA2加密协议 问题相关

    KRACK破解Wi-Fi WPA2加密协议 问题相关Wi-Fi爆重大安全漏洞,Android、iOS、Windows等所有无线设备都不安全了KRACK漏洞发现者回答纪实:所有设备都面临风险无线网络中所使用的WPA2安全加密协议遭到破解LineageOS已经着手修复WPA2安全加密协议的破解问题

    2022年5月1日
    35
  • PyTorch源码解读之torchvision.models「建议收藏」

    PyTorch源码解读之torchvision.models「建议收藏」PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchvision.transforms。这3个子包的具体介绍可以参考官网:http://pytorch.org/docs/master/torchvision/index.html。具体代码可以参考github:

    2022年6月24日
    49
  • vim编辑页面怎么退出_如何退出Vim编辑器?[通俗易懂]

    vim编辑页面怎么退出_如何退出Vim编辑器?[通俗易懂]皈依舞在输入命令之前,击中ESC钥匙..进入后,按下回归来确认。ESC完成当前命令并将Vim切换到正常模式..如果你按下:,:将出现在底部屏幕上。这证实了您实际上是在输入命令而不是编辑文件。大多数命令都有缩略语,可选部分括在括号中:c[ommand].标记为‘*’的命令仅为Vim(未在Vi中实现)。安全-退出(如果有未保存的更改,则失败)::q[uit]退出电流窗户..如果这是最后一个窗口就退出V…

    2022年5月29日
    42
  • 地理加权回归模型案例_地理加权回归不能用哑变量

    地理加权回归模型案例_地理加权回归不能用哑变量目前,GWR已经成为处理空间异质性的主要方法之一。与经典的全局回归模型的OLS不同,GWR是局部回归模型,模型系数是通过观测周围的样本来回归得到。在这里插入图片描述

    2022年9月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号