Spring的@Transactional注解是否线程安全?

8

我在一个类上使用了@Transactional,并在多线程环境中使用它。据我所知,它将在线程本地环境中执行,并且是线程安全的。

现在我的用例是从账户中提取金额?如果读取的账户金额是脏数据,是否会出现透支的情况?我不确定现在这种方式是否安全,或者我需要同步我的函数。

任何建议都将受到高度赞赏。


1
Spring使用底层数据库实现事务,因此它们与底层数据库一样线程安全。 - Jazzwave06
4
事务隔离是与线程安全不同的问题。 - Nathan Hughes
1
Nathan是正确的。查看您的数据库提供的锁定机制以及您的DB访问Java API(JPA,JDBC等...) - davidxxx
1
@Nathan,David如何在JPA或JDBC中实现事务隔离,有什么指针或起点吗?您能否推荐一些好的参考资料阅读? - Naresh Kumar
1
@Naresh Kumar,选择使用For Update、乐观锁和悲观锁来满足你的需求是不同的方式。 - davidxxx
1
感谢您的建议 @davidhxxx - Naresh Kumar
1个回答

7

你需要将事务隔离级别设置为防止从数据库中读取脏数据,而不是担心线程安全性。 数据库负责处理此问题的“脏读”方面 - 而不是Spring的线程模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接