是否可以在同一个应用程序中使用不同的事务隔离级别?例如,我想将 READ_COMMITTED 用于简单的客户端请求,将 READ_REPEATABLE 用于更复杂的请求。
问问题
382 次
1 回答
0
我浪费了数周时间试图弄清楚这一点,所以我发布了我学到的东西的记录。欢迎补充答案。
虽然在技术上可以使用Connection.setTransactionIsolation(int)更改事务隔离级别,但我强烈建议不要这样做。
- 事务隔离必须在事务开始之前设置。否则会导致“实现定义的”行为。
- 为了检测适当的事务隔离,您必须弄清楚您调用的任何方法(以及它们调用的任何方法)所需的事务隔离。
- 这很快演变成一场维护噩梦,您在努力跟踪每种方法的正确隔离级别。
- 如果您尝试在运行时以编程方式查询正确的隔离级别(通过询问您的依赖项他们需要什么隔离级别),您最终会得到非常丑陋的代码,并且再次成为维护的噩梦。
相反,我建议硬着头皮在整个应用程序中选择一个事务隔离级别。从安全的东西开始,然后慢慢转向性能更高的隔离级别。
于 2012-11-28T20:43:18.837 回答