인프런 커뮤니티 질문&답변

장원익님의 프로필 이미지
장원익

작성한 질문수

실전! 스프링 데이터 JPA

H2 데이터베이스 설치

h2 In-Memory에서 rollback

작성

·

458

0

안녕하세요!

강의를 듣고 강의를 토대로 혼자 이것 저것 해보고 있는 학생입니다!

다름이 아니라 강의와 다르게 h2를 spring boot 가 실행 될 때 메모리에서만 동작하게 하고싶어서

JDBC URL 을 jdbc:h2:mem/test 라고 지정을 했습니다.

그리고 문제는 @Test 어노테이션이 붙은 테스트 클래스에서 발생하였는데요, RepositoryTest 에서 @Transactional과 @Rollback(false) 를 추가시켰음에도 불구하고

spring boot가 돌아가는 8080/h2-console 에서는 자동으로 rollback이 되는데, 혹시 어떤게 문제인지 알 수 있을까요?


// MemberRepositoryTest

@SpringBootTest
@Transactional
@Rollback(false)
class MemberRepositoryTest {

    @Autowired
    private MemberRepository memberRepository;

    @Test
    @DisplayName("이메일로 조회")
    void read() {
        // given
        String email = "dhslrl321@gmail";
        String password = "hwi199";
        String nickname = "dhslrl321";

        Member member = Member.builder()
                .email(email)
                .password(password)
                .nickname(nickname)
                .build();
        memberRepository.save(member);

        // when
        Optional<Member> memberOptional = memberRepository.findByEmail(email);

        // then
        memberOptional.ifPresentOrElse(
                m -> assertEquals(nickname, m.getNickname()),
                Assertions::fail
        );
    }
}

// application.yml
spring:
  h2:
    console:
      path: /h2-console
      enabled: true
      settings:
        web-allow-others: true
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:auth
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      show_sql: true
      format_sql: true


답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 원익님

정확이 어떤 상황인지 잘 이해가 되지 않지만 답변을 드려볼게요.

테스트는 시작하고 끝나면 종료되어 버립니다. 따라서 메모리 모드로 동작하면 초기화 되는 것이 맞습니다.

추가로 ddl-auto: create-drop까지 되어 있어서 실행 후 종료되면 테이블을 모두 삭제합니다.

감사합니다.

장원익님의 프로필 이미지
장원익

작성한 질문수

질문하기