본문 바로가기

JAVA/Spring Framework

[Spring] 다중데이터소스 설정, application.yaml 분리 후 Testcase 오류 발생 및 해결

 
오류 내용은 다음과 같았다.
 
Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
 
물론 더 긴 내용이 있겠지만 대충 내용을 파악하자면 DataSource가 제대로 생성되지 않아서 이 후 모든 주입되는 빈에 영향을 주고 있었다.
 
상당히 고통을 받으며 해결하게 되었으므로 오늘은 해결 과정에 대해서 포스팅을 해보고자 한다.
 
 
  1. jdbc-url 설정?? 많은 내용을 구글에서 검색하며 찾아본 결과 다음의 포스팅을 발견하였다. 해당 내용은 이미 설정이 되어 있음을 확인하였고 문제가 되는 부분이 아니라고 인식하게 되었다 
 
  1. 다중으로 datasource를 설정하는 부분이 잘못된 게 아닌가? 의심을 하게 되었음. 새로운 프로젝트로 새롭게 만들어서 datasource 다중으로 설정해서 동작시켜보았으나 정상 작동함. 실험 완료된 코드를 서비스에 적용하였으나 동일한 오류 발생하였다.
 
  1. 테스트케이스에서만 오류가 발생하는 것으로 보아 application.yaml과 database.yaml로 나뉜 구조가 문제인 지 확인해보았음. 결과적으로 database.yaml 파일을 테스트코드에서 제대로 읽어오지 못해서 발생하는 문제임을 파악
 
이를 해결하기 위한 검색을 진행하였음. application.yaml 파일 나누기, database.yaml 등등 검색을 진행하였으나 application.yaml 을 나누는 방법에 대해서만 나와있고 customeName.yaml에 대한 답변은 찾을 수 없었습니다. 
 
이 과정에서 application.yaml 사용에 대한 부분을 학습할 수 있었는데 괜찮은 내용 공유합니다.
 
 
참고 자료 : 
 
 
그러다 Testcode에서만 제대로 bean을 가져오지 못하는 상황으로 testcode에서만 yaml파일을 따로 읽으면 해결이 될 것으로 판단하고 관련된 내용을 검색하였습니다.
 
결론적으로 해결방법에 대한 자료는 다음의 블로그에서 찾았습니다.
 
 
요약하자면 테스트케이스에서의 설정을 다음과 같이 추가해주면 됩니다. (properties 부분 확인 요망)
 
@AutoConfigureMockMvc
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.MOCK,
        properties = "spring.config.location ="+
                "classpath:/application.yaml"+
                ",classpath:/database.yaml"
)
public class ControllerTest {
    ...
}
 
다중데이터소스를 설정하였는데, 갑자기 테스트케이스가 동작하지 않으시는 분.
application.yaml을 각 역할에 알맞게 나누다가 테스트케이스에서 오류가 발생하시는 분께 도움이 되길 바랍니다.