복붙노트

[SPRING] Spring @ Transactional 및 JDBC autoCommit

SPRING

Spring @ Transactional 및 JDBC autoCommit

내 실제 응용 프로그램에서 JDBC autoCommit = false 집합이없는 DBCP 연결 풀이 있습니다. 기본 autoCommit = true 인 것 같습니다. 이것은 아마도 실수이지만이 매개 변수를 변경하면 미치는 영향을 이해하고 싶습니다.

나는 다음을 사용하고있다 :  - @Transactional 주석이있는 봄  - JDBC 판독기와 작성기, JdbcTemplate을 사용하는 최종 사용자 정의 작업 릿을 사용한 Spring 배치

나는 Spring이 TransactionManager가 처리하는 트랜잭션의 문맥에있는 경우 현재 연결에서 autoCommit = false를 설정했는지 알고 싶습니다. 기본 설정보다 우선 적용됩니까? 그것이 나에게 보이는 것처럼 그렇게하는 것이 합리적입니다.

해결법

  1. ==============================

    1.PlatformTransactionManager는 인터페이스이므로, 모든 구현체가 AutoCommit = false를 설정한다고 말하지만, 가장 일반적인 구현체 (DataSourceTransactionManager)는 AutoCommit = false를 설정합니다. 아래의 코드 스 니펫을 doBegin 메소드에서 확인하십시오.

    PlatformTransactionManager는 인터페이스이므로, 모든 구현체가 AutoCommit = false를 설정한다고 말하지만, 가장 일반적인 구현체 (DataSourceTransactionManager)는 AutoCommit = false를 설정합니다. 아래의 코드 스 니펫을 doBegin 메소드에서 확인하십시오.

    if (con.getAutoCommit()) {
                txObject.setMustRestoreAutoCommit(true);
                if (logger.isDebugEnabled()) {
                    logger.debug("Switching JDBC Connection [" + con + "] to manual commit");
                }
                con.setAutoCommit(false);
            }
            txObject.getConnectionHolder().setTransactionActive(true);
    

    이제 명시한 바와 같이 롤백을 활성화하기 위해 롤백 세그먼트가 없거나 롤백 세그먼트를 사용하지 않는 것이 좋습니다.

  2. from https://stackoverflow.com/questions/16301315/spring-transactional-and-jdbc-autocommit by cc-by-sa and MIT license