学习
实践
活动
工具
TVP
写文章

深入Java事务原理与应用

大家好,又见面了,我是全栈君 一、什么是JAVA事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。 既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系? 实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。 增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。 二、为什么需要Java事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 三、Java事务的类型 Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务

4610

java事务_Java 事务详解

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 Session,启动事务,执行所有与数据相关的工作,结束事务并关闭Session。 (1)JTA 在应用系统数据量越来越大时,系统数据就需要分布在不同的数据库中,当业务需求在多个数据库中做原子性操作时就可以选择JTA (Java Transaction API),JTA事务比JDBC事务更强大 (2)JTA原理 不同的数据库有不同的数据库供应商,JTA就是将这个不同的数据库管理起来,统一创建一个原子事务,全部成功即成功,一个不成功就回滚所有的操作(JTA还是较重量级) (3)实例 Spring (2)实现原理 当应用收到请求,应用会先将用户请求的数据保存到分布式消息中间件中,做一个保存操作。保存成功后就给用户返回提交成功信息。

5520
  • 广告
    关闭

    腾讯云精选爆品盛惠抢购

    腾讯云精选爆款云服务器限时体验20元起,云数据库19.9元/年起,还有更多热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java 事务嵌套_Java事务以及嵌套事务

    最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。 结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest 结论:如果事务存在异常,并进行捕获处理,不会影响事务。 4.3 场景:嵌套不同事务 a)事务嵌套,在不同事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public 结论:不同事务中,嵌套的事务,没有对异常进行处理,都不会执行成功。(其实在外部事务中出错,两个也是都不会插入成功数据。)

    8010

    Spring 事务底层原理

    方法未尾)(addAccount 方法移至createUser方法的同一个类里) required_new createUser (不成功) addAccount(不成功) 三、aop 事物底层实现原理 讲事物原理之前我们先来做一个实验,当场景五的环境改变,把addAccount 方法移至UserService 类下,其它配置和代码不变: @Override @Transactional public , accountid, name, initMoney); } 但是并不推荐这样写事务,还是另写AccountService类 调用addAccount最好

    7330

    Spring事务切面原理

    一、前言 本节我们来谈谈 <tx:advice/>、<aop:config> 标签如何创建事务切面的。 二、<tx:advice/>、<aop:config> 标签如何创建事务切面的 <tx:advice/>标签作用是创建一个TransactionInterceptor,作为事务切面的通知方法。 其中时序图中步骤(2)是设置配置demo的XML配置文件里面创建的事务管理器到TransactionInterceptor对象, ? 注:也就是<tx:advice/>标签的作用是生成一个TransactionInterceptor拦击器对象,并设置该对象的一些事务属性,然后该对象将作为事务切面的通知方法。 更多分布式事务咨询可以单击我 更多Spring事务配置解惑单击我 想了解更多关于粘包半包问题单击我 更多关于分布式系统中服务降级策略的知识可以单击 单击我 想系统学dubbo的单击我 想学并发的童鞋可以

    95020

    Spring事务原理详解

    一、使用 spring事务开启和使用比较简单,需要有数据源和事务管理器,然后在启动门面类上开启事务,在需要使用事务的地方添加注解就可以了,我们简单做一下回顾。 那么我们就要思考一个问题,为什么通过简单的配置和两个注解我们就能便捷的使用事务了,spring框架层面做了哪些能力支撑,接下来我们将从原理和源码维度对spring的事务原理进行分析。 二、原理分析 首先,spring事务管理之所以能生效,得有数据库吧,得有数据源吧,得有事务管理器吧,我们先看一下spring对于数据源和事务管理器的处理和配置。 ConfigurationClassPostProcessor会将其初始化并将selectImports返回的类列注册BeanDefinition然后实例化(可参考《ConfigurationClassPostProcessor原理详解 roll back JDBC transaction", ex); } } 然后会调用后续的一些操作,比如之前我们分析过的《TransactionalEventListener使用场景与原理分析

    29982

    java事务的使用_Java跨库事务

    即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 Java有几种类型的事务Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。 2.JTA事务 JTA(Java Transaction API)提供了跨数据库连接(或其他JTA资源)的事务管理能力。 由Java客户端程序或EJB调用。 e、Xid接口:为事务标识符的Java映射 注:前3个接口位于Java EE版的类库 javaee.jar 中,Java SE中没有提供! 3)、Java持久化API事务(JPA) Hibernate多年来一直是事实上的Java持久化标准,但是现在Java持久化API作为真正的Java持久化标准进入大家的视野。

    8130

    java事务回滚案例_java事务控制

    下面总结一下经验教训: Spring事务的管理操作方法 编程式的事务管理 实际应用中很少使用 通过使用TransactionTemplate 手动管理事务 声明式的事务管理 开发中推荐使用( 代码侵入最少) Spring的声明式事务是通过AOP实现的 主要掌握声明式的事务管理。 17.5.3 声明式事务的回滚 上一节中介绍了如何设置开启Spring事务,一般在你的应用的Service层代码中设置,这一节将介绍在简单流行的声明式事务中如何控制事务回滚。 在Spring FrameWork 的事务框架中推荐的事务回滚方法是,在当前执行的事务上下文中抛出一个异常。 ,这样事务才会回滚(默认情况下Error也会导致事务回滚)。

    7510

    Java 事务注解(注解式事务)

    spring中的@Transactional(rollbackFor = Exception.class)事务处理,当你的方法中抛出异常时,它会将 事务回滚,数据库中的数据将不会改变,也就是回到进入此方法前的状态 rollbackFor=Exception.class) 2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 3 不需要事务管理的

    22830

    java架构之路-(mysql底层原理)Mysql事务隔离与MVCC

    更新丢失(Lost Update) 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每 个事务都不知道其他事务的存在,就会发生丢失更新问题–最后的更新覆盖了由其 他事务所做的更新。 脏读(Dirty Reads) 一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数 据就处于不一致的状态;这时,另一个事务也来读取同一条记录,如果不加控 制,第二个事务读取了这些“脏”数据 一句话:事务A读取到了事务B已经提交的修改数据,不符合隔离性。    数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度上“串行化”进行,这显然与“并发”是矛盾的。 尽量控制事务大小,减少锁定资源量和时间长度,涉及事务加锁的sql 尽量放在事务最后执行 尽可能低级别事务隔离 最近搞了一个个人公众号,会每天更新一篇原创博文,java,python,自然语言处理相关的知识有兴趣的小伙伴可以关注一下

    31120

    技术干货| MongoDB事务原理

    本文就主要对MongoDB事务的基本原理事务的snapshot隔离、实现事务间并发操作的MVCC并发控制机制,以及事务日志做一些介绍! 事务的基本原理 与关系型数据库一样,MongoDB事务同样具有ACID特性,说明如下: 原子性(Automicity):一个事务要么完全执行成功,要么不做任何改变。 事务开始时,系统会创建一个快照,从已提交的事务中获取行版本数据,如果行版本数据标识的事务尚未提交,则从更早的事务中获取已提交的行版本数据作为其事务开始时的值。 关于作者:郭远威 MongoDB中文社区长沙分会主席;资深大数据架构师,著有《大数据存储MongoDB实战指南》《MongoDB核心原理与实践》;通信行业业务架构与数据迁移专家,先后在华为,中兴工作十余年 以上内容节选自《MongoDB核心原理与实践》一书,详情可点击链接查看: https://mp.weixin.qq.com/s/lWFvBkZ74smSjR7k7IN7wg 社区招募为了让社区组委会成员和志愿者朋友们灵活参与

    37810

    理解spring事务底层原理

    事务是一种all or nothing的执行策略,常见数据库,这种策略遵从ACID原则,可以很好的保证业务的执行,spring事务底层可以使用tx命名空间实现,也可以通过Transactional注解的方式来实现 ,本文就讲下spring transactional注解底层的工作原理,要了解这个工作原理,首先要了解cglib的工作原理,这个可以参考文章:https://blog.csdn.net/john1337 /article/details/88762825 了解了cglib的基本工作原理后,spring transactional底层工作原理就很容易理解了,笔者就把这个运作原理涉及到的几个重要的相关类在这里列举出来 "()Ljava/lang/String;", "hashCode", "()I", "clone", "()Ljava/lang/Object;"}, (var1 = Class.forName("java.lang.Object 该方法内部会判断每个要执行的方法是否有对应的advice,被Transactional注解的方法对应的默认advice就是TransactionInteceptor TransactionInterceptor 事务增强类

    9810

    Spring事务AOP实现原理

    正文 此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理。 可以说此处配置是事务的开关,如果没有此处配置,那么Spring中将不存在事务的功能。那么我们就从这个配置开始分析。 我们首先需要回顾一下AOP的原理,AOP中有一个 Advisor 存放在代理类中,而Advisor中有advise与pointcut信息,每次执行被代理类的方法时都会执行代理类的invoke(如果是JDK ,如果方法中存在事务属性,则使用方法上的属性,否则使用方法所在的类上的属性,如果方法所在类的属性上还是没有搜寻到对应的事务属性,那么在搜寻接口中的方法,再没有的话,最后尝试搜寻接口的类上面的声明。 中找到了事务属性,所以,它是与事务增强器匹配的,也就是它会被事务功能修饰。

    8830

    Kafka 事务的实现原理

    因为每次事务的信息都会持久化,所以 TC 服务挂掉重新启动后,会先从 事务 topic 加载事务信息,如果发现只有事务提交信息,却没有后来的事务完成信息,说明存在事务结果信息没有提交到分区。 - 客户端原理 - 使用示例: 下面代码实现,消费者读取消息,并且发送到多个分区的事务: // 创建 Producer 实例,并且指定 transaction id KafkaProducer - 运行原理 - 上面的例子使用了 Producer的接口实现了事务,但负责与 TC 服务通信的是 TransactionManager 类。 - 服务端原理 - TC 服务会为每个 transaction id 都维护了元数据,元数据的字段如下: class TransactionMetadata( val transactionalId 之后 TC 服务重启,会去事务 topic 加载数据,它发现事务的最后状态为 PrepareCommit,并且事务数据还包括了分区列表,这样 TC 服务会继续未完成的事务,会向列表中的各个分区发送事务结果请求

    1.3K50

    mysql事务的实现原理

    mysql事务的实现原理 事务原理 原子性、稳定性和持久性实现原理 原子性、稳定性和持久性是通过redo 和 undo 日志文件实现的,不管是redo还是undo文件都会有一个缓存我们称之为redo_buf undo 日志文件 undo记录了数据在事务开始之前的值,当事务执行失败或者ROLLBACK时可以通过undo记录的值来恢复数据。例如 AA和BB的初始值分别为3,5。 (磁盘) H 事务提交 通过undo可以保证原子性、稳定性和持久性 如果事务在F之前崩溃由于数据还没写入磁盘,所以数据不会被破坏。 但是单纯使用undo保证原子性和持久性需要在事务提交之前将数据写到磁盘,浪费大量I/O redo/undo 日志文件 引入redo日志记录数据修改后的值,可以避免数据在事务提交之前必须写入到磁盘的需求, 磁盘) G 事务提交 *通过undo保证事务的原子性,redo保证持久性。

    25120

    mysql事务的实现原理

    MySQL中服务器层不管理事务事务是由存储引擎实现的。 实现原理 在说明原子性原理之前,首先介绍一下MySQL的事务日志。 实现原理:Redo log(WAL write ahead log) 先了解一下MySQL的数据存储机制,MySQL的表数据是存放在磁盘上的,因此想要存取的时候都要经历磁盘IO,然而即使是使用SSD磁盘 隔离性(Isolation) 定义 与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 严格的隔离性,对应了事务隔离级别中的Serializable (可串行化),但实际应用中出于性能方面的考虑很少会使用可串行化。 实现原理 隔离性追求的是并发情形下事务之间互不干扰。

    46020

    saga分布式事务_分布式事务原理

    大家好,又见面了,我是你们的朋友全栈君 saga是分布式事务领域里一个非常重要的事务模式,特别适合解决出行订票这类的长事务,本文将深度剖析saga事务的设计原理,以及在解决订票问题上的最佳实践 01 .saga的理论来源 saga这种事务模式最早来自这篇论文:sagas 在这篇论文里,作者提出了将一个长事务,分拆成多个子事务,每个子事务有正向操作Ti,反向补偿操作Ci。 能够把子事务执行的结果保存到状态机,并在后续的子事务中作为输入 允许没有依赖的子事务之间并发执行 这种方式的优点是: 功能强大,事务可以灵活自定义 缺点是: 状态机的使用门槛非常高 SAGA的定位是一致性要求较低的长事务/短事务。 最后以一个现实中的问题案例,详细讲解dtm的saga事务使用 dtm是一个一站式的分布式事务解决方案,支持事务消息、SAGA、TCC、XA等多种事务模式,支持Go、Java、Python、PHP、C#、

    8720

    Java+Oracle实现事务——JDBC事务

    https://blog.csdn.net/huyuyang6688/article/details/46675171        J2EE支持JDBC事务、JTA事务和容器事务事务,这里说一下如何实现 JDBC事务。         JDBC事务是由Connection对象所控制的,它提供了两种事务模式:自动提交和手动提交,默认是自动提交。         看一个例子: import java.sql.*; public class TransactionTest{ public static void main(String[] args) throws ,所以它的缺点是事务的范围只局限于一个数据库的连接,同一个事务中无法操作多个数据库。

    93020

    深入理解 Spring 事务原理

    深入理解 Spring 事务原理 一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。 那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。 (开启正常提交事务,异常回滚事务)。 新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理回滚操作 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

    61430

    深入理解 Spring 事务原理

    Spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。 那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。 Java 动态代理。 它可以在运行期扩展Java类与实现Java接口。 cglib封装了asm,可以在运行期动态生成新的class(子类)。 原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

    6920

    扫码关注腾讯云开发者

    领取腾讯云代金券