gpt4 book ai didi

java - 当两个线程同时访问带有@Transactional 的方法时,我们会得到多少个事务?

转载 作者:行者123 更新时间:2023-11-29 01:51:20 24 4
gpt4 key购买 nike

假设我们有这段代码:

@Transactional
public String getUser(long id) {

User user = userDao.getUserById(id);
if(user == null) {
user = new User();
user.setXXX(XXX);
userDao.insert(user);
}
}

假设数据源是mysql5:

如果两个线程同时访问getUser() 方法,我们会得到多少事务?如果答案是两笔,那么两笔交易之间是什么关系?

最佳答案

截至 Spring 文档:

The getTransaction(..) method returns a TransactionStatus object, depending on a TransactionDefinition parameter. The returned TransactionStatus might represent a new transaction, or can represent an existing transaction if a matching transaction exists in the current call stack. The implication in this latter case is that, as with Java EE transaction contexts, a TransactionStatus is associated with a thread of execution.

这意味着对于每个线程,Spring 都会创建一个新事务,除非该线程已经存在一个事务。

当两个线程进入这个方法时,会创建两个独立的事务,它们之间没有任何关系。这里没有嵌套或任何东西(那是不同的场景)。我能想到的唯一存在任何关系的情况是使用 Propagation.REQUIRES_NEW 时,但这里不是这种情况。

关于java - 当两个线程同时访问带有@Transactional 的方法时,我们会得到多少个事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com