[SPRING] 전파 .REQUIRES_NEW로 인해 LockWaitTimeOutException이 발생 함
SPRING전파 .REQUIRES_NEW로 인해 LockWaitTimeOutException이 발생 함
Transactional annotation으로 정의 된 두 개의 함수 A와 B가 있습니다.
A에서 B에게 전화하고 있습니다.
@Transactional(value=Constants.READ_WRITE_REQUEST)
public int A(....){
B();
}
@Transactional(propagation=Propagation.REQUIRES_NEW,value=Constants.READ_WRITE_REQUEST)
public int B(....){
C();
}
@Transactional(value=Constants.READ_WRITE_REQUEST)
public int C(....){
...
}
그것은
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
함수 B에서 Propagation.REQUIRES_NEW를 제거하고 문제가 해결되었습니다.
이전 거래가 자물쇠를 들고 새 것이 만들어 졌기 때문입니까? 이것에 대한 어떤 생각?
해결법
-
==============================
1.죽은 자물쇠, 2 개의 트랜잭션, 바깥 쪽 (A에서)과 안쪽 (B에서)이 같은 리소스를 잠그려고 시도하는 것처럼 보입니다.
죽은 자물쇠, 2 개의 트랜잭션, 바깥 쪽 (A에서)과 안쪽 (B에서)이 같은 리소스를 잠그려고 시도하는 것처럼 보입니다.
from https://stackoverflow.com/questions/8847377/propagation-requires-new-causing-lockwaittimeoutexception by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Mule Zip 파일을 압축하여 FTP 서버로 압축 파일 보내기 (0) | 2019.05.16 |
---|---|
[SPRING] 봄에 NoClassDefFoundError (0) | 2019.05.16 |
[SPRING] SpringSource Tool Suite에 Spring MVC 프로젝트 템플릿이 없다. (0) | 2019.05.16 |
[SPRING] Spring의 기본 출력을 멈추는 방법은 무엇입니까? (0) | 2019.05.16 |
[SPRING] 스프링 휴식 자원 변경 경로 (0) | 2019.05.16 |