autoCommit이 활성화 된 경우 커밋 할 수 없음 druid 연결 풀을 사용하여 postgre 데이터베이스에 연결하는 경우 예외가 발생합니다. 조사 후 결과는 druid 버그입니다.

문제 설명

일부 인터페이스는 비정상이고 일부 데이터 인터페이스는 정상입니다. 예외가 발생했습니다. 자동 커밋이 활성화되면 커밋 할 수 없습니다. 특정 예외는 이보다 길지만 주된 이유는 데이터베이스의 자동 커밋 구성과 관련이 있습니다.

문제 환경

springmvc 프로젝트는 Ali의 druid를 데이터베이스 연결 풀로 사용합니다.

 

조사 과정

소스 코드를 통해 spring-tx 트랜잭션의 DataSourceTransactionManager가 매번 다음 코드를 실행 함을 알 수 있습니다.

if (con.getAutoCommit ()) {     txObject.setMustRestoreAutoCommit (true);     if (logger.isDebugEnabled ()) {         logger.debug ( "JDBC 연결 ["+ con + "]을 수동 커밋으로 전환");     }     con.setAutoCommit (false); }





즉, Spring이 연결될 때마다 AutoCommit = false로 설정되지만 여기서는 분명히 효과적이지 않습니다. 왜 효과가 없나요? 그런 다음 의심 대상이 데이터 소스로 전송되고 데이터 소스는 Ali의 druid 연결 풀을 사용하므로 드루이드 버그로 의심되며 다음은 druid 연결 풀을 대체하는 것과 같습니다.

연결 풀 교체

HikariCP와의 연결 풀을 교체 한 후, HikariCP 지원은 AUTOCOMMIT = false를 설정. 다시 테스트 한 후 , 문제가 발견되지 않습니다. 알리의 드루이드 연결 풀의 문제를 결정한다 .

 

해결책

1. 해결하려면 데이터베이스 속성 autocommit = false를 구성합니다.

데이터베이스를 구성하지 않으려면 다음 방법을 참조하십시오.

2. 연결 풀을 교체하고 Ali의 druid 연결 풀을 사용하지 마십시오.

 

추천

출처blog.csdn.net/eguid/article/details/108636179