`

JAVA-事务

    博客分类:
  • java
阅读更多
http://blog.csdn.net/huilangeliuxin/article/details/43446177
以上一系列文章



比如Serveice里面的某个受写事务控制的方法A里面可能会调用其他service里的B方法(此方法也是受事务控制的),也可能会调用Dao里的某些方法。
其实,说白了,所有的业务上的事务底层都是数据库事务实现的。
受事务控制的方法里面所有地方用的数据库连接都是同一个,A和B是否走同一个事务有几种情况可能出现:
1、如果A受事务控制,B不受事务控制,则B肯定会跟着A走同一个事务。
2、如果A受事务控制,B也受事务控制,则B是否和A走同一个事务是根据配置的事务传播特性决定的(一般是Spring的配置文件里配置的),最常见常用的配置是propagation="REQUIRED",
这个配置就表示A方法里面所有调用的其他service里的方法或Dao里的方法,都是和A走的同一个事务。
当然,如果把propagation配置成其他属性,会出现A和B各自用不同的事务,也就是说A和B分别开启事务,这种的就会存在一种情况就是,程序在A里面执行开启一个事务,当执行到B又单独
开启一个事务,之后B执行完了,A再继续执行,此时A报错了,A进行回滚,但是由于B和A的事务是分开的,所以B不会回滚,这就相当于不是所有的业务逻辑都回滚了,还差一部分,而那一部分
自己恢复不了了,还得想其他办法。


A和B到底走一个事务还是走两个事务,是根据配置的事务传播特性决定的,咱们当前配置的都是REQUIRED,这种的A和B都是走同一个事务的。


假如B在执行的过程中抛异常或报错了,但是B自己捕获处理了,这种的就不会报错,会继续往下执行,事务也不会回滚。
假如B在执行的过程中抛异常或报错了,但是B没有处理,直接抛出了,抛给A了,A也可以进行捕获处理,
如果A捕获处理了,那事务不会管,继续往下执行,如果A没有捕获,继续往上抛,从A这个方法里抛出去了,抛给上层,这种的A事务就会直接回滚。
说白了,也就是说,无论什么情况,只要从A方法里直接抛出异常或错误了,那么对应A的那个事务直接就会回滚。如果出错了,但是在A里面自己捕获处理了,这种的事务不会回滚,继续往下执行。


但是假如A里面出现了远程服务调用(http或hessian调用),这种的如果在执行的过程中远程调用出现问题抛出异常或抛出错误(http调用或hessian调用抛出异常或错误),这种的如果在A里面
没有捕获处理的话那就会直接在A方法抛出异常,抛给上层,这种的A对应的事务会回滚,A里面不涉及远程调用的其余的业务都能回滚,但是远程调用里面的已经改过的业务就回滚不了了,因为
在远程他也不知道自己要回滚,也没有办法回滚。这种的一般处理方式有下面几种:
1、也有处理的策略是,先让远程操作成功,然后本地操作。本地失败,调用远程失败接口(必须提供远程的失败回滚接口)。这种是要求比较严格的那种。就是这次操作必须两边一致。
2、另一种方式是,假设我A系统成功了,然后我就想办法让B执行成功。如果失败了,我通过定时任务或者队列,一直调用直到成功结束。




这里会配置只要继承exception的异常被抛出,都要回滚


可以多看看慕课网上关于事务的视频。沈寻
  • 大小: 28.3 KB
分享到:
评论

相关推荐

    java-事务 test aa

    java-事务 test aa

    mysql-connector-java-5.1.27

    这个驱动包允许Java程序通过JDBC(Java Database Connectivity)接口连接到MySQL服务器,执行SQL查询、事务处理等数据库操作。 `mysql-connector-java-5.1.27.jar`是该驱动包的核心文件,包含了所有必要的类和资源...

    mysql-connector-java-8.0.23.zip

    MySQL Connector/J提供了一个接口,使得Java应用程序能够执行SQL语句,处理结果集,管理事务,并实现其他数据库交互功能。 在"mysql-connector-java-8.0.23.zip"压缩包中,主要包含的就是`mysql-connector-java-...

    mysql-connector-java-5.1.40.tar

    MySQL Connector/J遵循JDBC接口标准,使得Java开发者能够方便地访问MySQL数据库,执行SQL查询、事务处理等操作。 1. **安装与配置**: - 解压`mysql-connector-java-5.1.40.tar`文件,通常会得到一个jar包,例如`...

    mysql-connector-java-5.1.44

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,允许Java开发者在Java应用中访问和操作MySQL数据。`mysql-connector-java-5.1.44`是这...

    mongo-java-driver-3.2.2.jar.zip

    9. **事务处理**:从MongoDB 4.0开始,Java驱动程序支持多文档ACID事务,这对于需要跨多个文档的原子操作非常有用。 10. **异步编程**:从3.2版本开始,驱动程序提供了异步API,利用Java 8的CompletableFuture,...

    mysql-connector-java-5.1.49.jar

    MySQL Connector/J是MySQL数据库系统与Java应用程序之间的重要桥梁,它是一个实现了JDBC(Java Database Connectivity)规范的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。"mysql-...

    mysql-connector-java-5.1.37.rar

    开发者在Java程序中引入这个JAR文件,就能通过JDBC API与MySQL服务器进行通信,执行SQL查询、事务处理等操作。 标签"mysql-connector-"是对该文件类型的识别,表明这与MySQL的JDBC驱动有关。 压缩包内的文件包括:...

    mysql-connector-java-5.1.47 jar包

    - 回滚和提交事务:支持ACID(原子性、一致性、隔离性和持久性)事务管理。 - 错误处理和诊断:提供详细的错误信息和诊断工具。 - 国际化:支持多种语言和字符集。 在实际开发中,`mysql-connector-java-5.1.47.jar...

    mysql-connector-java-5.1.7-bin.jar

    这个驱动实现了Java.sql和javax.sql接口,使得开发者能够在Java程序中执行SQL语句、处理结果集、管理事务等操作。 在描述中提到的"mysql-connector-java-5.1.7"是该驱动的版本号,表示这是MySQL Connector/J的一个...

    mysql-connector-java-5.1.49.tar.gz

    它包含了必要的类和资源,使得Java应用能够识别并连接到MySQL服务器,处理SQL查询,执行事务,以及管理数据库连接。这个版本的驱动兼容MySQL 5.1.x版本的数据库服务器。 在实际使用中,首先需要将压缩包解压。`._...

    mysql-connector-java-8.0.11.jar文件

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity)标准的驱动程序,允许Java开发者在Java应用中访问和操作MySQL数据库。`mysql-connector-java-8.0.11....

    mysql-connector-java-8.0.21.jar

    3. **事务支持**:支持ACID(原子性、一致性、隔离性、持久性)事务,确保数据处理的可靠性和一致性。 4. **连接池**:通过集成流行的连接池实现,如C3P0、HikariCP或Apache DBCP,可以有效管理数据库连接,提高...

    mysql-connector-java-8.0.21.zip

    MySQL Connector/J支持多种功能,包括事务处理、预编译语句、批处理以及JDBC的其他高级特性。 3. MySQL 8.0.21: 这是MySQL数据库的一个特定版本,包含了性能改进、新功能和错误修复。例如,8.0版本引入了增强的JSON...

    mysql-connector-java-8.0.23.jar

    MySQL Connector/J 8.0.23 是一个用于Java应用程序的数据库驱动程序,它使得Java开发者能够连接到MySQL数据库服务器并执行SQL操作。这个jar文件是MySQL官方提供的,确保了与MySQL服务器的兼容性和稳定性。在Java环境...

    mysql-connector-java-8.0.27.jar

    3. **事务处理**:支持ACID(原子性、一致性、隔离性和持久性)事务特性,确保数据的一致性和完整性。 4. **批处理**:允许一次性提交多条SQL语句,提高执行效率。 5. **结果集处理**:返回查询结果,支持遍历、...

    mysql连接包mysql-connector-java-5.1.27.jar

    这个驱动程序符合JDBC接口规范,使得Java开发者可以使用标准的JDBC API来与MySQL进行交互,包括创建数据库连接、执行SQL查询和更新、管理事务等。 `mysql-connector-java-5.1.27.jar`中的主要知识点包括: 1. **...

    mysql-connector-java-8.0.16.jar

    - **数据传输**:MySQL Connector/J实现了JDBC接口,使得Java开发者能够通过标准的Java SQL API与MySQL数据库进行交互,包括执行SQL语句、处理结果集、事务管理等。 - **兼容性**:8.0.16版本兼容Java SE 8及以上...

    mysql-connector-java-5.1.40-bin.jar连接器

    4. **事务管理**:支持JDBC的事务特性,包括自动提交、手动提交、回滚和保存点。 5. **数据库元数据**:提供DatabaseMetaData接口,可以获取关于数据库、表、列等元数据信息。 6. **批处理**:允许一次发送多个SQL...

Global site tag (gtag.js) - Google Analytics