본문 바로가기
Spring|Spring-boot

Spring Transaction Option

by oncerun 2022. 10. 15.
반응형

선언적 트랜잭션의 여러 옵션에 대해 간단히 알아보자. 

 

 

1. value, transactionManager

 

String value() default "";
String transactionManager() default "";

 

트랜잭션을 사용하려면 스프링 컨테이너에서 어떤 트랜잭션 매니저를 사용할지 알아야 한다.  선언적 트랜잭션이 아닌 프로그래밍적으로 트랜잭션을 사용할 때 우리는 트랜잭션 매니저를 주입받아 사용했다. 

 

@Transactional을 사용할 때 별도의 트랜잭션 매니저를 지정하지 않았는데, 선언적 트랜잭션에서도 트랜잭션 매니저를 지정해주어야 한다. 다만 지정하지 않으면 기본으로 등록된 트랜잭션 매니저를 사용하기 때문에 대부분 생략한다. 

다만 사용하는 트랜잭션 매니저가 둘 이상이라면 위 옵션을 사용해 지정하여 구분할 수 있다.

 

...java

@Transactional("JobTxManager")
public void member() {...}

@Transactional("orderTxManger")
public void order() {...}

 

애노테이션 속성이 하나인 경우 value는 생략하고 값을 바로 넣을 수 있다. 

 

 

 

2. rollbackFor

 

예외 발생 시 스프링 트랜잭션의 기본 정책은 다음과 같다.

 

1. 언체크 예외 발생 시 롤백한다.

2. 체크 예외는 커밋한다. 

 

막상 하다 보면 체크 예외에도 롤백을 하고 싶을 때가 있다. 그럴 경우 rollbakFor 옵션을 사용해 기본 정책에 예외를 추가하여 롤백할 수 있다.

...java
@Transactional(rollbackFor = Exception.class)

이 경우에는 체크 예외인 Exception가 발생해도 롤백하게 된다. 다만 하위 예외들 또한 대상에 포함된다. 

 

추가적으로 rollbackForClassName는 예외 이름을 문자로 넣으면 된다. 

반대로 norollbackFor가 있으며 기본 정책에 추가로 어떤 예외가 발생했을 때 롤백하면 안 되는지 지정할 수 있다.

 

 

3. isolation

 

트랜잭션 격리 수준을 지정할 수 있는 옵션으로, 기본 값을 데이터베이스에서 설정한 트랜잭션 격리 수준을 사용하는 DEFAULT이다. 

 

 

4. timeout

 

트랜잭션 수행 시간에 대한 타임아웃을 초 단위로 지정한다. 기본 값은 트랜잭션 시스템의 타임아웃을 사용한다. 

운영 환경에 따라 동작 유무가 다르기에 확인 후 사용해야한다. 

 

 

5.readOnly

 

트랜잭션은 기본적으로 읽기 쓰기가 모두 가능한 트랜잭션이 생성된다. 만약 이 값을 true로 사용하면 읽기 전용 트랜잭션이 사용되는데 이 경우 등록, 수정, 삭제가 안되고 읽기 기능만 작동한다. 

그리고 readOnly 옵션을 사용하면 읽기에서 다양한 성능 최적화가 발생할 수 있다.

 

readOnly는 크게 3곳에서 적용된다.

 

  • 프레임워크
  • JDBC 드라이버
  • 데이터베이스

 

 

https://docs.spring.io/spring-framework/docs/5.0.9.RELEASE/spring-framework-reference/data-access.html#transaction-declarative

 

Data Access

This part of the reference documentation is concerned with data access and the interaction between the data access layer and the business or service layer. Spring’s comprehensive transaction management support is covered in some detail, followed by thoro

docs.spring.io

 

각 스프링 버전별 트랜잭션에 대한 변경점과 추가에 대한 레퍼런스가 존재한다. 

자신이 사용하는 버전에 따라 읽어보는 것도 좋을 것같다. 

반응형

'Spring|Spring-boot' 카테고리의 다른 글

Apache Web Server and Spring Boot embedded tomcat 연동  (0) 2022.11.12
Spring Transaction Propagation  (0) 2022.10.16
Spring DB (5)  (0) 2022.10.14
Spring DB(6)  (0) 2022.09.27
Spring DB (4)  (1) 2022.09.19

댓글