gpt4 book ai didi

java - Spring事务边界和DB连接保持

转载 作者:IT老高 更新时间:2023-10-28 13:46:49 27 4
gpt4 key购买 nike

我在 jpa 上使用 spring boot 和 hibernate 和 tomcat 连接池。你能帮我理解spring在事务中如何使用数据库连接吗?例如考虑以下场景:

  1. 我们有 2 个连接的数据库连接池。
  2. Spring 启动一个事务,即调用带有 @Transactional 注释的方法。
  3. 此方法执行数据库更新
  4. 调用外部服务
  5. 当收到来自外部服务的响应时,它会更新 DB 并返回。
  6. Spring 提交事务

假设外部服务(第 4 步)需要 1 分钟才能完成,那么 DB 池中将有多少个 DB 连接可用?假设 spring 一直保持 DB 连接直到事务完成,在此期间收到的任何请求都只有 1 个 DB 连接可用,如果我们收到超过 1 个请求,他们将不得不等待 DB 连接。

请确认我的理解,如果正确,建议我如何在高交易量系统中处理这种情况。

谢谢

最佳答案

首先你的理解是正确的。请参阅有关 declarative transaction management 的 spring 文档.

enter image description here

我猜您是在事务中调用外部服务,因为您希望在发生异常时回滚数据库更改。或者换句话说,您希望数据库更新反射(reflect)外部服务调用的状态。

如果是这样,您就不能将其移出事务边界。在这种情况下,您应该增加连接池大小,或者您可以将长时间运行的事务委托(delegate)给处理它们的专用服务器节点。这将保持例如一个“主”服务器节点,用于处理远离长时间运行事务的用户请求。

您应该考虑数据一致性。数据库更新是否真的必须与外部服务调用同步?外部服务调用能否移出事务边界?

关于java - Spring事务边界和DB连接保持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751922/

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