【发布时间】:2020-02-24 11:03:32
【问题描述】:
我们的项目使用 Kotlin 和 springboot 作为框架。
在我们的服务类中,我们有一堆代码,其中在标有@Transactional 的方法中很少有http 调用。
我需要将 http 调用移到事务之外,因为这会产生性能问题。
代码看起来像这样:
@Transactional
Method1() {
“HTTP Call”
Saving to DB
“Call to another service B()”
}
在这个service B 中,我们调用的是Method2()
Method2() {
Bunch of operations and then it further Saves few objects to DB.
}
所以基本上@Transactional 也负责所有嵌套的数据库操作。
对如何进行此更改有任何建议吗?可以采用哪些不同的策略来实现这一目标?
提前致谢!
【问题讨论】:
-
http调用的结果会影响交易的结果吗?
-
是的。它是对另一个服务的调用,该服务获取一些记录,然后我们将其保存到数据库中,然后从方法中返回对象。
-
将保存移至另一种方法(外部服务)使该方法具有事务性,而不使另一个具有事务性。
-
@M.Deinum 我已经更新了我的问题,因为我偶然发现了一些更复杂的东西。所以现在我假设(并且在现实中也应该发生)是,最初当 Method1() 与
@Transactional一起使用时,它也在处理所有嵌套的 DB 操作,在服务 B 中也是如此。但是,如果我只是将Saving to DB从 Method1() 中移出并用 @Transactional 标记这个新方法,它将弄乱我的嵌套数据库操作。 -
这不是您问题的一部分。所有应该是事务性的都应该在一个方法中。如果那是不可能的,那么就让它保持原样。另外,为什么会出现性能问题? TX 所花费的时间可能只是进行这些 HTTP 调用所花费的时间的一小部分。
标签: spring-boot http kotlin