0

是否可以在同一个应用程序中使用不同的事务隔离级别?例如,我想将 READ_COMMITTED 用于简单的客户端请求,将 READ_REPEATABLE 用于更复杂的请求。

4

1 回答 1

0

我浪费了数周时间试图弄清楚这一点,所以我发布了我学到的东西的记录。欢迎补充答案。

虽然在技术上可以使用Connection.setTransactionIsolation(int)更改事务隔离级别,但我强烈建议要这样做。

  • 事务隔离必须在事务开始之前设置。否则会导致“实现定义的”行为。
  • 为了检测适当的事务隔离,您必须弄清楚您调用的任何方法(以及它们调用的任何方法)所需的事务隔离。
  • 这很快演变成一场维护噩梦,您在努力跟踪每种方法的正确隔离级别。
  • 如果您尝试在运行时以编程方式查询正确的隔离级别(通过询问您的依赖项他们需要什么隔离级别),您最终会得到非常丑陋的代码,并且再次成为维护的噩梦。

相反,我建议硬着头皮在整个应用程序中选择一个事务隔离级别。从安全的东西开始,然后慢慢转向性能更高的隔离级别。

于 2012-11-28T20:43:18.837 回答