首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用WebSphere和DB2覆盖Spring中的事务隔离

如何用WebSphere和DB2覆盖Spring中的事务隔离
EN

Stack Overflow用户
提问于 2019-03-26 03:40:03
回答 1查看 356关注 0票数 0

在spring中使用WebSphere和DB2覆盖事务隔离的最佳方法

大家好,

似乎WebSphere不允许Spring以编程方式覆盖在server.xml (在WebSphere数据源中)中配置的事务隔离级别。那么,当在这种情况下需要覆盖事务隔离时,最好的选择是什么?

假设默认情况下隔离级别设置为REPITABLE_READ,有一个方法...一个巨大的方法,在最后有许多选择和耦合的更新。让我们假设无论如何都没有办法重构这个方法,但是我们知道在这个方法中间的某个地方有一些可以在RR隔离之外使用的selects,因为它们很大,有很多连接,当我们运行这些selects时,我们正在为其他事务锁定数据库中的行。问题是,将它们提取到由@Transactional(isolation=READ_COMMITED)注释的单独方法中不会改变这种情况,因为这种隔离会被WebSphere或数据库驱动程序忽略。

那么,是否可以将连接从Hibernate会话中取出,并在所需的位置(围绕这两个方法)将隔离级别更改为READ_COMMITED,然后在方法结束时将其返回给REPITABLE_READ?我假设每个线程都使用连接,那么更改连接的隔离级别应该不会有任何副作用?

或者,更好的做法是向READ_COMMITED添加一个具有特意配置的隔离级别的专用WebSphere数据源,并创建一个带有注释的方面,从而允许用数据源替换这两种方法?

另外,如果有人能解释一下隔离覆盖机制是如何在@Transaction级别工作的,以及Spring +数据库交互中可能有多少个隔离级别,我将非常感激。或者,也许有人对这个答案有很好的联系。

感谢所有人!

EN

回答 1

Stack Overflow用户

发布于 2019-04-03 20:46:26

似乎没有办法改变隔离级别,这是通过@Transactional注解在server.xml中的DataSource上设置的。虽然可以通过方面拦截DAO方法调用,并通过setTransactionIsolation()直接在连接上设置隔离级别,但一旦事务启动,就无法返回隔离,因为不允许在全局事务中运行的可共享连接上设置隔离级别...

因此可能的解决方案-添加具有读提交隔离的单独数据源,并在需要的任何地方使用它。其他解决方案是-在DB2中,可以直接在SELECT语句中指定隔离级别子句: WITH UR,CS,RS,RR

例如:从带CS的城市中选择名称;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55345271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档