2 kjwangxun kjwangxun 于 2016.02.28 21:48 提问

两个事务任意失败一个回滚 10C

不加任何措施,两个事务呈直线,第一个失败就不执行第二个,但怎么使第一个失败了还能执行第二个,来判断到底哪个事务有问题

2个回答

fk002008
fk002008   2016.02.28 22:06

2个事务,还是直线的关系
如果你想第二个事务失败了还能回滚第一个事务那么也就是说第一个事务没有commit了
不放做一个事务的观察控制器
将所有的事务注册在这个观察器里面,
然后这个观察控制器可以记录每个事务的运行结果并且可以显示指定那个事务可以先执行

大体做法:
1--你先做一个事务的接口,里面定义这个事务的执行方法和事务的运行状态
2--做一个事务观察控制器
它可以注册多个事务接口,并且为每个事务定义一个执行顺序号吗
通过这个事物观察控制器可以启动事务
3--将你的事务都用一个类表示然后实现这个事务接口
4--通过事务观察控制器来控制事务的执行顺序以及结果的记录

fk002008
fk002008 不成直线关系也没有关系,使用观察控制器可以记录事务的执行状态,可以增加一个错误处理方法,一旦控制器监管的事务有一个执行异常就可以回滚全部的或者指定某些事务回滚
2 年多之前 回复
kjwangxun
kjwangxun 不好意思。我说错了,两个事务可以不成直线关系,只要任意一个事务失败就回滚。第一个失败还能执行第二个事务,第二个成功也回滚
2 年多之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.28 23:03

你别让这两个事物产生顺序,各自执行

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
当需要2个事务才能完成一个完整业务时,回滚解决办法!抛砖引玉
这种情况一般会发生在与其他程序远程交互等待时间比较长的情况,例如:在作一个银行子系统比如基金认购,需要和储蓄系统进行交互! .基金认购时候需要对产品的剩余进行减少 和储蓄系统交互需要5秒,对此人账户进行扣款这时候就需要2个事务!为什么?想象一下全国的系统如果一个交易锁5秒数据库那么。。。。。。。。(效率及其低下,如果先不减去等储蓄的信息回来後在回滚,这样可能造成最后
spring注解事务及事务回滚失败的原因
背景spring支持编程式事务管理和声明式事务管理两种方式。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行
一次MySql事务执行回滚失败分析
前几天在添加一个上限控制功能时,发现在一次取资源超过限制之后,事务回滚,但该次操作造成的数据库更改并未回滚 按以下步骤进行分析: 1. 仔细检查代码逻辑,看是否由于事务回滚没有调用造成的脏数据 2. gdb单步调试程序,定位脏数据产生的时间点,回滚是否成功 3. 根据已有资料分析问题产生原因。经过以上步骤分析,在单步时已经确认是由于事务中调用了create table造成的隐式提交,从而回滚
C#中一个保持事务原子性的方法,插入数据失败回滚
public static void InsertContractTransactionFromApplication(string connectionString, int applicationType, int applicationId)         {             object appObj;             ContractTransaction[] t
.net 事务问题,执行多条更新语句,如果有一条出异常,全部回滚
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();System.Data.SqlClient.SqlTransaction tran = new System.Data.SqlClient.SqlTransaction();System.Data.SqlClient.SqlComm
事务失败会全部回滚吗?
前言 这个问题看起来是一个简单明了,显而易见的问题。 事务应该是原子的,要么整个事务完成,要么没有完成。 举个栗子 CREATE TABLE TestingTransactionRollbacks ( ID INT NOT NULL PRIMARY KEY , SomeDate DATETIME DEFAULT GETDATE() ) ; GO BEGIN TRANSACTIO
如何通过程序实现同一事务中多次数据库更新的错误回滚?
 具体情况是:begin transaction //使用程序来完成对事务的控制。// connect databaseupdate the first row // update successfullyupdate the second row// fail to update due to connection lost.  这个时候我怎么实现Roll back 第一
JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚) .
在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电, 则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC自动提交,格式为: conn.setAutoCommit(false); 执行多条SQL语句; conn.commit(); //恢复自动提交模式 conn.setAutoCommit(t
Java事务处理全解析(二)—— 失败的案例
在本系列的上一篇文章中,我们讲到了Java事务处理的基本问题,并且讲到了Service层和DAO层,在本篇文章中,我们将以BankService为例学习一个事务处理失败的案例。   请通过以下方式下载github源代码: git clone https://github.com/davenkin/java_transaction_workshop.git   Bank
spring默认就能行,没有就新建,有了就一起用一个事务(service调用service),一方错都回滚
@Transactional 注解是用来指定接口、类或方法必须拥有事务语义的元数据。 如:“当一个方法开始调用时就开启一个新的只读事务,并停止掉任何现存的事务”。 默认的 @Transactional 设置如下: 事务传播设置是 PROPAGATION_REQUIRED 事务隔离级别是 ISOLATION_DEFAULT 事务是 读/写 事务超时默认是依赖于事务系统