inflearn logo
강의

Course

Instructor

Real-world! Spring Boot and JPA Utilization 1 - Web Application Development

@Transactional 했는데 롤백 문구가 안 떠요

311

sichelmond

5 asked

0

다음과 같이 코드를 실행하면 강의 화면처럼 "Rolled back transaction for test"가 나와야 하는데 그렇지 않고 H2에서도 컬럼만 있는 빈 테이블입니다. 뭐가 문제일까요?

 

package jpabook.jpashop;

import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {

    @Autowired
    MemberRepository memberRepository;

    @Test
    @Transactional
    public void testMember() throws Exception {
        //given
        Member member = new Member();
        member.setUsername("memeberA");

        //when
        Long saveId = memberRepository.save(member);
        Member findMember = memberRepository.find(saveId);

        //then
        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
    }
}

java spring 웹앱 spring-boot jpa

Answer 5

2

David

안녕하세요. sichelmond님, 공식 서포터즈 David입니다.

스프링 6 이후부터는 로그 내용이 변경되었습니다.

 

먼저, application.yaml 파일의 로그 관련 옵션을 다음과 같이 설정해 주세요.

@Rollback(false)를 제거해 주세요.

그러면 롤백 로그(강의 내 로그 내용과 동일하지 않음)를 확인할 수 있습니다.

logging:
  level:
    root: trace(또는 debug)
// 디버그 레벨이 trace 일 때
TRACE 73338 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction (1) for test context: ..

// 디버그 레벨이 debug 일 때
DEBUG 73219 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction (1) for test class ..

스프링 6 이후 버전

https://github.com/spring-projects/spring-framework/blob/6.0.x/spring-test/src/main/java/org/springframework/test/context/transaction/TransactionContext.java

스프링 6 이전 버전

https://github.com/spring-projects/spring-framework/blob/5.3.x/spring-test/src/main/java/org/springframework/test/context/transaction/TransactionContext.java

감사합니다.

1

sichelmond

오오 감사합니다! trace를 하니 콘솔에 끝도 없이 동일한 문구가 계속 나와서 debug로 바꾸니 해결되었어요!

0

kimdev0206

안녕하세요. 같은 상황에서, 의문점이 있어 질문 남깁니다.

 

junit4 및 junit5 환경 모두에서

application.yml 파일에 org.hibernate.SQL: debug 설정 시,

롤백 문구가 확인되지 않고, dml 문구가 확인되지 않습니다.

 

application.yml 파일에 root: debug 설정 시,

변경된 롤백 문구와 dml 문구는 확인이 되는데,

org.hibernate.SQL: debug 로 기대한 로그보다 많은 로그를 확인하게 됩니다.

 

스프링 6 환경에서 org.hibernate.SQL: debug 의 간추린 로그를 확인하고 싶습니다.

0

OMG

안녕하세요. 김용기님, 공식 서포터즈 OMG입니다.

해당 질문에 많은 댓글들이 포함되어 있어 확인과 관리가 어려워 추가로 글을 새로 작성하여 주시면 도움 드리도록 하겠습니다.

감사합니다.

0

sichelmond

혹시 이 부분(롤백 false)이 꼭 화인 되어야 다음 단계가 가능할까요?

0

OMG

반드시 확인할 필요는 없지만, 문제 원인이 무엇인지에 따라 다를 것 같습니다.

일단 진행해보시고 추후 문제 발생 시 다시 질문을 남겨주시겠어요?

0

sichelmond

네! 감사합니다:)

0

OMG

안녕하세요. sichelmond님, 공식 서포터즈 OMG입니다.

프로젝트 코드 확인해보았습니다.

해당 클래스 파일을 열어서 확인해보니 junit4 관련 의존성을 추가하지 않은 것 같아 build.gradle 확인해보니

image

추가를 하지 않으셨더라구요.

image

관련하여 강의 메뉴얼을 참고해주세요

image

build.gradle 수정 후 image코끼리 버튼으로 의존성 갱신을 하신 다음 확인해보시겠어요?

 

감사합니다.

0

sichelmond

답변 감사합니다! 추가하고 의존성 갱신 후 실행했는데 그대로라서 수정한 파일 다시 공유드립니다!

https://drive.google.com/file/d/1Zgtm9YTS0xY5DFIhPeB-NyiBFXP6Wg9P/view?usp=sharing

0

OMG

코드 다시 확인해보았는데, 코드엔 문제가 없습니다.

h2를 실행시킨 상태에서 확인한게 맞을까요?

h2가 실행중인데도 동일한 문제가 발생한다면

jpashop이라는 이름으로 h2를 연결하던 설정을 강의를 참고하여 jpashop2로 생성해서 다시 확인해보시겠어요?

.

application.yml

image

h2(h2는 초기 설정부터 처음부터 진행)

image

0

David

안녕하세요. sichelmond님, 공식 서포터즈 David입니다.

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

sichelmond

  1. 문제 영역 실행 방법 :

    MemberRepositoryTest.java 파일에서 @Test, @Transactional, @Rollback(false) 확인 후 실행시킵니다.

  2. 문제 상세 설명 : 콘솔 창에서 롤백 관련 내용이 안 나옵니다. Rollback(false)가 작동하지 않아 H2에서 MEMBER테이블 확인하면 행(ID, USERNAME)만 뜨고 memberA 데이터가 없습니다.

     

  3. 공유 링크 : https://drive.google.com/file/d/1ZVi_DXU-ZNU0igcaoAQ5IUcMUbhWRp8_/view?usp=drive_link

 

0

David

공유 링크 권한 확인 부탁드립니다 🙂

0

sichelmond

앗 네 수정했습니다.

sdk 설정 오류

0

49

2

오탈자 - @Transactional

0

55

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

63

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

137

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

100

1

멤버서비스테스트 부분에서 막힙니다.

0

164

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

118

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

112

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

108

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

76

2

Repository에서 EntityManager 주입 방식 차이

0

88

1

롬복과 사용자 정의 setter 메서드

0

71

1

주문 목록 조회 fetch join 질문드립니다

0

81

1

dirty checking 질문드립니다.

0

81

1

동시성 관련 질문입니다

0

74

1