#13 spring transaction : propagation - recover(require_new)

This commit is contained in:
haerong22
2022-07-23 00:39:13 +09:00
parent 1ef1e16952
commit 049d148ea1
3 changed files with 40 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ package com.example.springtransaction.propagation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
@@ -15,7 +16,7 @@ public class LogRepository {
private final EntityManager em;
@Transactional
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void save(Log logMessage) {
log.info("log 저장");
em.persist(logMessage);

View File

@@ -27,6 +27,7 @@ public class MemberService {
log.info("== logRepository 호출 종료 ==");
}
@Transactional
public void joinV2(String username) {
Member member = new Member(username);
Log logMessage = new Log(username);

View File

@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.UnexpectedRollbackException;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -110,4 +111,40 @@ class MemberServiceTest {
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
assertThrows(UnexpectedRollbackException.class, () -> memberService.joinV2(username));
//then
assertTrue(memberRepository.find(username).isEmpty());
assertTrue(logRepository.find(username).isEmpty());
}
/**
* memberService @Transactional:ON
* memberRepository @Transactional:ON
* logRepository @Transactional:ON(REQUIRES_NEW) Exception
*/
@Test
void recoverException_success() {
//given
String username = "로그예외_recoverException_success";
//when
memberService.joinV2(username);
//then
assertTrue(memberRepository.find(username).isPresent());
assertTrue(logRepository.find(username).isEmpty());
}
}