From 55920b20554ac19014fe44cd81922e1ef4b905ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=A8=ED=98=91?= Date: Thu, 23 Jun 2022 11:16:28 +0900 Subject: [PATCH] add Transaction Annotaion Code --- .DS_Store | Bin 14340 -> 14340 bytes .../.DS_Store | Bin 6148 -> 6148 bytes .../springtx/propagation/LogRepository.java | 6 +- .../propagation/MemberRepository.java | 1 + .../springtx/propagation/MemberService.java | 7 +- .../propagation/MemberServiceTest.java | 107 ++++++++++++++++++ 6 files changed, 117 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 9b8abfeae6619c6f2e2a53f2396674ecf27f34ce..2c03674ca461a170dbaa6dcef0d72760f4d44522 100644 GIT binary patch delta 33 gcmZoEXerpxD8+1KX*T(dxXb1fQakw(94#AO0NdUSdjJ3c delta 43 lcmZoEXerpxD8*rBX{w`OY;HXHqqzO%6H+_*(L}UtcmYCI4qX5M diff --git a/7.spring-DB DataAccess Application Skill/.DS_Store b/7.spring-DB DataAccess Application Skill/.DS_Store index c3f36d3136b2a2425725eac9abbeabb506bce0dd..0139d067df63755a4a4f9f3cdd55727cdc6ee0e6 100644 GIT binary patch delta 202 zcmZoMXfc=|#>B!ku~2NHo+2a5#(>?7iyfGm7+E&+Fi9~gaxoY&=rI&C6fhJqWHRJ2 zq%)K-R3w!b7bNB6CowQE?3irBR2VN&U2SA(rlVkNVOXo9P;F^sprc@7Y*t&#$sww& zZygk$os*lF-vv|;1dNOjnt>Ne!>Dc`1FLB)qu~2NHo+2aD#(>?7lMO^zHuJNHGj3L6d&s!3fq64K2R{c;(Plx8 X@640=MI1R8fPj&Kfn{@q$QotmemberService.joinV1(username)) + .isInstanceOf(RuntimeException.class); + //then: 완전히 롤백되지 않고, member 데이터가 남아서 저장된다. + assertTrue(memberRepository.find(username).isPresent()); + assertTrue(logRepository.find(username).isEmpty()); + } + + /** + * MemberService @Transactional:ON + * MemberRepository @Transactional:OFF + * LogRepository @Transactional:OFF + */ + @Test + public void SingleTx() throws Exception{ + //given + String username = "singleTx"; + //when + memberService.joinV1(username); + //then + assertTrue(memberRepository.find(username).isPresent()); + assertTrue(logRepository.find(username).isPresent()); + } + + /** + * MemberService @Transactional:ON + * MemberRepository @Transactional:ON + * LogRepository @Transactional:ON + */ + @Test + public void outerTxOn_success() throws Exception{ + //given + String username = "outerTxOn_Success"; + //when + memberService.joinV1(username); + //then + assertTrue(memberRepository.find(username).isPresent()); + assertTrue(logRepository.find(username).isPresent()); + } + + /** + * MemberService @Transactional:ON + * MemberRepository @Transactional:ON + * LogRepository @Transactional:ON Exception + */ + @Test + public void outerTxOn_fail() throws Exception{ + //given + String username ="로그예외_outerTxOn_fail"; + //when + assertThatThrownBy(() -> memberService.joinV1(username)) + .isInstanceOf(RuntimeException.class); + //then + assertTrue(memberRepository.find(username).isEmpty()); + assertTrue(logRepository.find(username).isEmpty()); + } + + /** + * MemberService @Transactional:ON + * MemberRepository @Transactional:ON + * LogRepository @Transactional:ON Exception + */ + @Test + void recoverException_fail() { + //given + String username = "로그예외_recoverException_fail"; + //when + assertThatThrownBy(() -> memberService.joinV2(username)) + .isInstanceOf(UnexpectedRollbackException.class); + //then: 모든 데이터가 롤백된다. + assertTrue(memberRepository.find(username).isEmpty()); + assertTrue(logRepository.find(username).isEmpty()); + } + + /** + * MemberService @Transactional:ON + * MemberRepository @Transactional:ON + * LogRepository @Transactional(REQUIRES_NEW) Exception + */ + @Test + void recoverException_success() { + //given + String username = "로그예외_recoverException_success"; + //when + memberService.joinV2(username); + //then: member 저장, log 롤백 + assertTrue(memberRepository.find(username).isPresent()); + assertTrue(logRepository.find(username).isEmpty()); + } } \ No newline at end of file