首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何记录Spring事务内容

如何记录Spring事务内容
EN

Stack Overflow用户
提问于 2010-09-07 15:24:37
回答 2查看 1.6K关注 0票数 7

有很多关于记录Spring事务管理器的活动(启动、提交和回滚)的帖子。然而,我最近遇到了一个死锁问题,仅记录活动是不够的。

我们代码中的基本问题是对事务传播REQUIRED和REQUIRES_NEW的混乱使用。有这么多来回的方法调用,以至于我们最终会有很多事务堆叠在一起。遗憾的是,代码库是巨大的,解决方案非常紧迫……(我们都知道这是什么。)

问题是死锁,因为代码被添加到一个事务中的查询实体中,而这些实体在另一个事务中被次要顺序地修改。Spring会抛出一个异常,通知实体X的更新超时,因为它被锁定了。现在,知道这一点很好,但是如何找到错误代码:执行早期锁定的查询。

我的问题(最后):有没有一种方法可以记录添加到事务中的实体?通过这种方式,我可以专门查找锁定Spring所抱怨的实体的事务。

谢谢!:-)

EN

回答 2

Stack Overflow用户

发布于 2010-10-01 19:23:22

Spring委托给事务管理器,因此Spring不知道事务中涉及哪些实体,而是事务管理器知道。正如Donz所说,查看交易经理的信息是最好的调查方法。

您还可以遍历所有事务定义,并从除只写/始终写类型方法(如审计或日志记录)之外的所有类型方法中删除REQUIRES_NEW。如果您的主要业务逻辑中有REQUIRES_NEW,那么这是一个错误或某种非常奇怪的设计。盲目移除它可能会产生比你想象的更少的副作用。

票数 1
EN

Stack Overflow用户

发布于 2010-09-30 18:45:17

尝试在ORM中记录查询。也许这样会更容易找到“坏”的事务。

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

https://stackoverflow.com/questions/3656559

复制
相关文章

相似问题

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