어떻게 작동합니까? 트랜잭션 주석이있는 메소드입니다. DB 트랜잭션은 가로 챌 때 스프링 트랜잭션으로 열리고 커밋됩니다. 또한 이러한 메소드가 완료되지 않은 동안 DB의 모든 관련 자원이 잠긴 상태로 유지됩니다. 예를 들어 트랜잭션 방식에서 DB의 엔티티가 몇 개 있는데 여러 번 업데이트하거나 제거했습니다. 이 모든 것이 봄 트랜잭션에서 일어나고 DB 트랜잭션은 필요한 잠금이있는 트랜잭션 방식의 끝에서만 발생합니다. ??? 메소드가 멈추는 경우 (예 : 교착 상태), 잠긴 리소스가 DB의 다른 리소스에 대해 잠긴 상태로 유지됩니까? 내가 그렇듯이 ..봄. 봄 (최대 절전) 트랜잭션을 사용하는 DB 트랜잭션 관리
DB (postgresql) state:
30179 | username | 00:23:05.688157 | IDLE in transaction
6739 | username | 00:23:13.02717 | IDLE in transaction
6748 | username | 00:23:15.266922 | IDLE in transaction
25595 | username | 00:23:22.382349 | IDLE in transaction
25595 | username | 00:23:22.382349 | IDLE in transaction
모두 잠금 장치 (23, 21, 20, 5, 6)가 있습니다. 어떻게 이런 일이 일어날 수 있니? 나는 오랫동안 일하지 않았다. 교착 상태 만 : D 그러나 이것은 일어나지 않아 !! 그래서 일부 트랜잭션 메서드가 멈추지 만 리소스가 잠긴 상태로 유지됨에 따라 다른 트랜잭션이나 다음 트랜잭션이 잠겨져 잠긴 리소스를 기다리고 일부 시스템이 잠시 작동을 멈췄습니다.
그래서 트랜잭션 방식으로 걸려있는 경우 잠긴 DB의 리소스도 잠겨 있습니다. Thats 아주 나쁜. 나는 이런 행동을 믿지 않는다. DB에서 시간이 많이 걸리는 트랜잭션이 있어서는 안된다. – whatswrong
나는 DB가 타임 아웃에 의해 교착 상태를 "감지"할 것으로 기대한다. – Ralph
그게 전부입니다. 하지만 자바에서 교착 상태 또는 매우 오랜 동작이있었습니다. 위의 내용은 트랜잭션에 20 분 이상이 걸린 DB 프로세스입니다. 자원도 공개되지 않았다. 그래서 스프링/하이버 네이트 트랜잭션이 DB와 어떻게 협력하는지 궁금합니다. – whatswrong