JTA 로 JPA 다중 DataSource 트랜잭션 처리 하기
Spring Boot 2.x 에서는 2가지 JTA 구현방법을 정의하였다.
Spring Boot 2.x 의 JTA 구현
Atomikos:spring-boot-starter-jta-atomikos dependency 추가 또는
Bitronix:spring-boot-starter-jta-bitronix dependency 추가 하는 방식이다.
Spring Boot 2.3.0 부터 Bitronix 비권장으로 변경 되었다. 그래서 Atomikos 설정하는 부분만 언급한다.
여기서 JdbcTemplate 로 제일 기본적인 트랜젝션 transaction 만 다루어 본다.
아래와 같은 환경으로 예를 들어보자.
우리는 2개의 Database가 있고 각각 test1 , test2 라고 한다.
해당 Database 에서 모두 User 테이블이 있고 , 똑같게 유지되길 원한다. 그래서 client 로부터 들어온 name =aaa , age = 30 이라는 데이터를 각각 User 테이블에 Update 시 각각 User 테이블 2개 모두 갱신해줘야 한다. 하나라도 실패하면 실패로 간주해야 한다.
pom.xml 추가
application.properties 설정
또는 application.yml
다중 DataSource 설정 클래스 작성
Service 를 작성
테스트코드를 작성
테스트 결과:
test1 : 모두 정상 update ,
test2: tx2 method() 가 test1 위 name = aaa 의 사용자 age = 40 로 갱신 후 예외 발생!, JTA 가 제대로 수행되었다면 age =30 으로 롤백 될것. 테스트 결과 age= 30 이므로 JTA 정상 수행되었다고 불수 있음.

Log 확인
transaction-logs 확인
Last updated