【问题标题】:How to use different transaction isolation levels within the same application?如何在同一个应用程序中使用不同的事务隔离级别?
【发布时间】:2012-11-28 20:43:18
【问题描述】:

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

【问题讨论】:

    标签: jdbc transaction-isolation


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多