如何在同一个应用程序中使用不同的事务隔离级别?

时间:2012-11-28 20:43:19

标签: jdbc transaction-isolation

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

1 个答案:

答案 0 :(得分:0)

我浪费了几个星期试图解决这个问题所以我发布了我所学到的记录。欢迎提供其他答案。

虽然技术上可以使用Connection.setTransactionIsolation(int)更改事务隔离级别,但我强烈建议反对执行此操作。

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

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