Java Spring@Transactional和Spring@Lock注释之间的关系是什么?
我发现Java Spring@Transactional和Spring@Lock注释之间的关系是什么?,java,spring,java-annotations,Java,Spring,Java Annotations,我发现@Transactional用于确保存储库方法或服务方法上的事务。 @Lock用于存储库方法,以确保实体锁定以提供隔离 我想到了一些问题: 这两种注释的主要区别/关系是什么 何时使用@Transactional以及何时使用@Lock @Lock在分布式数据库系统中提供数据并发性和一致性是否有用 事务性:无论何时放置@Transactional annotation,它都会启用符合ACID属性的事务性行为 酸:酸(原子性,稠度,隔离性,耐久性)是一组 用于保证有效性的数据库事务的属性 即使在
@Transactional
用于确保存储库方法或服务方法上的事务。@Lock
用于存储库方法,以确保实体锁定以提供隔离
我想到了一些问题:
@Transactional
以及何时使用@Lock
@Lock
在分布式数据库系统中提供数据并发性和一致性是否有用事务性:无论何时放置@Transactional annotation,它都会启用符合ACID属性的事务性行为 酸:酸(原子性,稠度,隔离性,耐久性)是一组 用于保证有效性的数据库事务的属性 即使在发生错误的情况下 原子的 保证事务中的所有操作都被视为单个“单元”,要么完全成功,要么完全失败 一致的 通过防止数据损坏,确保事务只能将数据库从一个有效状态带到另一个有效状态 隔离 确定一个事务所做的更改如何以及何时对另一个事务可见。从严格的角度来看,Serializable和Snapshot隔离是前两个隔离级别 耐用 确保事务的结果永久存储在系统中。即使在断电或系统故障的情况下,修改也必须持续
锁定:不应与事务性锁定混淆,@Lock在事务期间启用锁定行为 JPA定义了两种主要的锁类型
- 无:无锁
- 乐观:乐观锁定
- 乐观\u力\u增量:乐观锁定,版本更新
- 悲观强制增量:悲观写锁,版本更新
- 悲观读取:悲观读取锁定
- 悲观写入:悲观写入锁定
- 阅读:乐观的同义词
- 写:与乐观的力量增量同义
现在回答你的问题
我们用来处理并发的两个主要工具是数据库事务和分布式锁。这两者是不能互换的。当需要锁时,不能使用事务。当您需要事务时,不能使用锁。您能更具体一点吗。。。我的意思是a交易失败的通常情况是什么?事务内部是否使用任何锁定系统?是的,事务锁定用于保护资源并确保ACID,隔离在这里也起作用,最后提交的事务获胜,默认情况下连接的隔离级别为READ committed,它可以防止脏读。您可以在
@Lock
上阅读有关事务期间锁定的更多信息,它是一个Spring数据(JPA)注释,而不是像@Transactional
那样的Spring annation。