首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事务隔离级别如何使用多个@ transaction更改整个事务

事务隔离级别如何使用多个@ transaction更改整个事务
EN

Stack Overflow用户
提问于 2021-07-22 15:41:41
回答 1查看 36关注 0票数 1
代码语言:javascript
运行
复制
@Transactional
public void a() {
  b();
  c();
}

@Transactonal(isolation = Isolation.SERIALIZABLE)
public void b() {
  // some code with update in db
}

public void c() {
  // some code with selects and updates in db
}

在方法'c‘中将使用什么隔离级别?据我所知,这将是一个交易。在方法'b‘中,我们只是连接到当前事务并更改其隔离级别。但是在方法b执行之后,它会被改回默认值吗?

我之所以这样问,是因为在这种负载较大的情况下,我们在方法'c‘中得到了'PSQLException: ERROR: want’t serialize access big update‘,尽管我希望在方法'c’中有一个默认的隔离级别。

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 16:11:26

代码语言:javascript
运行
复制
@Transactional
public void a() {
  b();
  c();
}

@Transactonal(isolation = Isolation.SERIALIZABLE)
public void b() {
  // some code with update in db
}

public void c() {
  // some code with selects and updates in db
}

使用@Transactional从同一个类调用另一个方法将不起作用,因为代理不能处理来自同一个类的调用。它是如何在幕后代理,工作,不允许这样的事情。

但是,如果您从另一个spring bean调用另一个方法,该方法具有@Transactional,则它将被遵守。

代码语言:javascript
运行
复制
@Service
public SpringClass {

    @Transactional
    public void a() {
      anotherSpringClass.b();
      anotherSpringClass.c();
    }

}

在那里,您可以定义希望使用另一个隔离级别打开嵌套事务。

代码语言:javascript
运行
复制
@Service
public class AnotherSpringClass {

@Transactional(propagation = Propagation.NESTED, isolation = Isolation.SERIALIZABLE)
public void b() {
  // some code with update in db
}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68480954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档