事务是啥?在java中如何手工执行事务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务是啥?在java中如何手工执行事务相关的知识,希望对你有一定的参考价值。
事务 指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性;在java中你要手工执行事务,如果是jdbc连接数据库,那么就设置提交的时候手动提交
conn.setAutoCommit(false);//conn 是connection对象
当结束后
conn.commit();
希望对你有帮助 参考技术A 举个例子,银行转账就是一个事物:从A账户减去金额,吧该金额转到B账户中。吧所有操作完成并且数据同步到数据库中,事物才栓完成。但是数据库操作过程中可能发生错误,其中一个操作失败,就会造成A+B账户金额与操作前的有出入,当发生错误后要取消操作(数据库的事物回滚),保证数据的一致性。
手工执行事物:
1、关闭数据库自动提交,
2、数据库操作完成后如果出错:回滚;没有错误:提交
3、记得关闭数据库连接 参考技术B 简单的说个例子吧。比如你要修改数据库中的内容,而且有很多,update1 update2 update3 ,如果3条数据都修改成功这是我们预期的目标,如果update2 删除失败了我们让整个事务内操作的内容全部取消掉。
事务开启
操作1
操作2
操作3
关闭事务
如果出现异常 进行 回滚
Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚
【中文标题】Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚【英文标题】:Spring - Transaction should commit in one method but should rollback in other methods which does a DB transaction 【发布时间】:2019-05-13 05:40:23 【问题描述】:在我有一个场景的情况下,如何在 Java 中处理 Spring Transaction:
一个服务方法让我们说methodA()调用另一个方法——methodB()。 从methodB(),我正在做一个验证,如果验证结果为真,我将调用另一个methodC(),这个方法必须被提交,而所有其他方法应该得到回滚,即从methodA()和methodB()完成的事务必须回滚,但是必须提交methodC中的事务,并且不能回滚。
为了回滚我使用的事务 -
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
实时场景 -
当我执行交易时,我会尝试创建一些交易。基于这些交易,我检查其中一个值是否达到阈值点,我需要触发一封邮件。这封邮件是一个数据库事务。所有其他事务必须回滚,只有邮件事务必须持久化。
任何帮助表示赞赏。
编辑:-
类似的问题 -
commit changes in try-catch inside @Transactional
但这并不能解决我的问题。如果@Transactional 也在类级别和方法级别给出怎么办?
【问题讨论】:
【参考方案1】:在我看来,这样的代码
@Transactional(propagation= Propagation.REQUIRED)
public void methodA()
methodB();
public void methodB()
if(validtaion=true)
SeverB.methodC();
throw YourException;
// in ServerB.java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodC()
// do your thing
而且,你最好测试一下它是否运作良好。
【讨论】:
我尝试过使用这种方法,但效果仍然不佳。有一个类级别的@Transaction,我在其中调用methodC()。我猜这可能是一个障碍。不知道如何解决这个问题:( 为了使aop工作。你需要把add @Transactional放在另一个类中。methodB和methodC不在同一个类中。 尝试在另一个类中使用@Transactional - 的methodC()。 我运行我的测试用例,它可以工作。您需要专注于您调用的第一个方法。这个方法把@Transactional.以上是关于事务是啥?在java中如何手工执行事务的主要内容,如果未能解决你的问题,请参考以下文章
druid SQL监控里执行时间、最慢、事务中等是啥意思,执行时间分布的[0,4,0,0,0,0,0,0]等又是啥意思?