【发布时间】:2012-03-31 10:33:02
【问题描述】:
我正在开发一个具有基于 Spring 的 Web 服务和基于 Spring Jdbc 的持久性的项目。 我已经配置了一个 DataSourceTransactionManager 来管理事务并使用切入点将其应用于服务层。 事务传播级别设置为 REQUIRED。
查询是通过 Spring 提供的 JdbcTemplate 发出的。
问题是,如果对服务有多个并发请求,我会得到 MySQLTransactionRollbackException("Deadlock found when trying to get lock; try restarting transaction")。
显然其中一个事务获得了锁,导致第二个事务失败。
我的问题是——应该如何配置 Spring 以延迟服务的执行直到获得锁,而不是仅仅放弃并抛出异常?
我什至无法捕获异常并尝试重新执行查询,因为我已在服务层应用事务作为保持 DAO 清洁的建议。
我希望只获得一个声明性解决方案(因为我是 AOP 狂热者和反对样板代码的十字军 :-))。但即使是程序化解决方案也是受欢迎的。
感谢您的建议。
更新 -
@ninjalj 是的,这实际上是一个真正的僵局。原来我写错了我的测试用例。傻我:-(
【问题讨论】:
标签: java mysql database spring transactions