Spring
Spring Boot @DataJpaTest 에서 h2만 연동되는 문제
구티맨
2021. 10. 15. 12:28
JUnit에서 Repository 테스트를 하기 위해, @SprintBootTest 대신에 @DataJpaTest 를 사용하여
테스트 코드를 작성 중인데 h2 대신에 실제 DB를 연동하려고 하지만
막상 실행해보면, h2 데이터베이스에 계속 연결이 되는 것을 보게 됩니다.
그래서 db 관련 profile이 의도한 대로 적용이 안되나 싶어서 mysql을 위한 profile도 활성화를 해보았지만
항상 h2 데이터베이스로 연결을 합니다.
2021-10-15 12:22:29.402 INFO [-] [main] a.m.s.SegmentBrowserApplicationTests : The following profiles are active: mysql-default-db
2021-10-15 12:22:30.390 INFO [-] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-15 12:22:30.661 INFO [-] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 255ms. Found 22 JPA repository interfaces.
2021-10-15 12:22:30.743 INFO [-] [main] beddedDataSourceBeanFactoryPostProcessor : Replacing 'dataSource' DataSource bean with embedded version
2021-10-15 12:22:31.058 INFO [-] [main] o.s.j.d.e.EmbeddedDatabaseFactory : Starting embedded database: url='jdbc:h2:mem:5d2febd6-1127-447f-b0c9-c1172603d716;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
이렇게 @DataJpaTest를 사용하면 무조건 h2로 접속이 되는 이유는
@DataJpaTest에서 Default로 h2 in memory 를 사용하기 때문입니다.
다른 DB를 사용하기 위해서는 자동으로 구성해주는 부분을 제거해주어야 합니다.
UnitTest 클래스에 아래 어노테이션을 적용하여 자동 설정을 제거해주면 됩니다.
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class JpaUnitTests {
...
}
그리고, JunitTest를 수행하면 설정된 datasource 값에 따라 DB를 연동하게 됩니다.
참조