본문 바로가기
web/SpringBoot

DataJpaTest 중 삽질해결 기록....

by 뽀리님 2023. 8. 31.

JPA 로 회원등록 테스트를 하는 도중 자꾸 이 에러가 미친듯이 뜨는게 아닌가 ㅠ

 

@DataJpaTest
public class JPATest {
    @Autowired
    UserRepository userRepository;

    @Test
    @DisplayName("회원가입 테스트")
    void regUserInfo(){
        UserEntity userEntity = UserEntity.builder().id("test")
                .name("테스트")
                .password("1234")
                .birth("601122")
                .gender("M")
                .role("ADMIN")
                .address("서울시")
                .phone("01077778888")
                .email("test@test.com")
                .build();
        UserEntity result = userRepository.save(userEntity);
        System.out.println("createdDate = " + result.getCreateAt());
        System.out.println("modifiedDate = " + result.getUpdateAt());
    }
}

 

 

음 ... datasource 설정을 가져오다 실패하는구만!!! 하고 열심히 구글링을 하니, 

@DataJpaTest  기본적으로 테스트마다 롤백을 진행하고, 테스트에는 내장 in-memory 데이터베이스를 사용해서 생기는 문제라 한다. (참고로 나는 MySQL 을 쓰는중)

 

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

 

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) 어노테이션을 이용해 dataSource 변경하지 않고 내가 설정한 MySQL 을 쓰겠다고 명시.

 

히히 그럼 다시 해봐야지

 

하지만 동일하게 문제가 또 발생

 

아니 대체 왜....ㅠ ㅠ 그대로 따라해봤는데 안된다고!!!

 

결국에 원인을 찾았다.

 

내가 Mybatis 와 JPA 를 같이 쓰려고 아래와 같이 Multiple DataSource 설정을 해놨기 때문....ㅜㅜ

@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource mysqlDataSource() {
    return DataSourceBuilder.create().build();
}

 

 

이런 경우엔 등록한 데이터소스 클래스를 따로 Import 시켜줘야 한다고 한다.

 

@ImportAutoConfiguration(DatabaseConfig.class)

 

해당 어노테이션 추가

 

 

 

 

실행해보면 잘된당!

 

 

참고 

https://wave1994.tistory.com/181

https://velog.io/@chlwogur2/DataJpaTest-Error-creating-bean-with-name-dataSource-%EC%97%90%EB%9F%AC