应避免使用嵌套connection的场景,否则在高并发下将从出现死锁
例如如下的代码:
?
entityListenerController.afterLoad(className, list);
中使用又调用了另外的manager去执行查询,如此就形成了
ConnectionA open
ConnectionB open
ConnectionB close
ConnectionA close
的情形,这种使用方法在高并发下将导致因获取Connection而引发的死锁。
?
一种解决方法是加上只读事务@Transactional(readOnly = true)
以保证使用同一个Connection。