TEL. 053-453-6585
OPEN&CLOSE.  9:00~19:00
CLODED SHOP.  MONDAY
 
 
 

스프링 트랜잭션 예제

2019年8月3日

단일 트랜잭션에서 여러 테이블을 업데이트하는 간단한 Spring JDBC 프로젝트를 만듭니다. 트랜잭션은 모든 JDBC 문이 성공적으로 실행될 때만 커밋해야 하며 그렇지 않으면 데이터 불일치를 방지하기 위해 롤백해야 합니다. Spring 관리 트랜잭션에서는 물리적 트랜잭션과 논리 트랜잭션 간의 차이점과 전파 설정이 이 차이에 어떻게 적용되는지 알고 있어야 합니다. 다음 예제에서는 완전히 다른 트랜잭션 설정으로 두 개의 고유한 콩을 구성하는 방법을 보여 주십니다. 트랜잭션이 실행되는 동안 스레드에 저장되며 더 이상 필요하지 않을 때 이를 정리하는 것은 트랜잭션 관리자의 관리입니다. 스프링 프레임워크는 프로그래밍 방식의 트랜잭션 관리의 두 가지 방법을 제공합니다. MySQL 데이터베이스 드라이버가 mysql 설치와 호환되는지 확인합니다. 사용할 트랜잭션 관리자의 이름입니다. 트랜잭션 관리자의 이름이 트랜잭션 관리자가 아닌 경우에만 필요합니다. 메서드에 대한 트랜잭션 설정을 평가할 때 가장 파생된 위치가 우선합니다. 다음 예제의 경우 DefaultFooService 클래스는 읽기 전용 트랜잭션에 대한 설정이 있는 클래스 수준에서 비고를 따르지만 동일한 클래스의 업데이트Foo(Foo) 메서드에 대한 @Transactional 개의 추가가 보다 우선합니다. 클래스 수준에서 정의된 트랜잭션 설정입니다.

위의 출력에서 볼 수 있듯이 첫 번째 트랜잭션에 대한 예외가 있었음에도 불구하고 롤백되지 않았으며 두 주문에 대한 주문은 여전히 유지되었습니다. 이는 확인된 예외 트랜잭션의 경우 @Transactional `rollbackFor` 특성을 지정하지 않는 한 암시적으로 롤백되지 않음을 보여줍니다. 자체 호출이 트랜잭션으로 래핑될 것으로 예상되는 경우 AspectJ 모드(아래 표의 모드 특성 참조)를 사용하는 것을 고려하십시오. 이 경우 처음에는 프록시가 없습니다. 대신 대상 클래스는 모든 종류의 메서드에서 런타임 동작으로 @Transactional 변환하기 위해 직조됩니다(즉, 바이트 코드가 수정됩니다).

コメント