공부 기록/Spring

[개인공부] properties 문제 해결

뵤옹 2023. 9. 21. 14:27

아직까지도 모르는 것들이 많아서 공부용으로 만든 웹 페이지는 헐렁뚱땅 복잡하게 작성되어 있다. 그래서 그런지 2개의 다른 DB를 연결하고 싶어서 시도를 했고, 잘 되지 않아서 mapper 부분에 주석을 걸면서 비효율적으로 테스팅을 했다...

상용 DB와 local DB를 경우에 따라 사용해야 하는데 현상황을 본 사수분이 안타까워 하시면서 급한대로 properties 파일을 수정해주셨다.

그리고 properties 파일을 적용하면서 생긴 에러를 어떻게 해결했는지 간단하게라도 적어두려고 한다.

 

resource 폴더 안에는 위의 이미지와 같이 파일이 위치해 있다.

Gradle을 사용해 jar 파일을 실행해야 했기 때문에 Gradle build를 실행한 순간, 에러가 발생했다.

 

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException at DataSourceProperties.java:186

 

properties를 수정하면서 생긴 문제라는 점은 알겠지만 DB 정보를 입력해주었는데도 에러가 발생하여 뭐가 문제인지 알 수 없었다.

원인은 Spring Framework가 Gradle build를 할 때 어느 DB를 default로 설정해서 build를 할지 몰랐기 때문.

 

application.properties

spring.profiles.active: (default로 설정할 mapper 파일 명)

# DB 정보 작성

 

spring.profiles.active를 사용해서 default로 사용할 DB를 설정할 수 있다. 나는 prod를 default로 설정했다.

그리고 build의 configurations를 다음과 같이 설정해주었다.

VM options에 -Dspring.profiles.active=prod라고 작성하면 작성한 profile로 서버 환경에 맞는 Context가 적용이 된다고 한다.

Spring Profile도 같은 Spring Allication을 사용하지만 각 서버에 맞는 Context를 사용할 때 이용할 수 있다고 하는데 이에 대해서는 좀 더 공부 후 따로 포스팅을 해야 할 거 같다.(후에 포스팅을 올리게 되면 링크를 걸 예정이다.)

Context를 설정하면 Java 안에서 @Configuration이나 @Bean 관련 Annotation에서 활용이 가능해진다.

이렇게 설정해주면 prod의 DB 데이터로 build가 정상적으로 이루어진다.

test 파일 실행
build 성공

 

그렇다면 Spring Application을 실행할 때 local에서 실행하려면 어떻게 해야할까?

현재 application.properties 파일을 임의로 나눠놓았기 때문에 사용하려는 DB의 mapper가 있는 폴더 명을 사용하면 된다.

Spring Application의 Configurations의 Active profiles를 local로 설정하면 정성적으로 local로 실행이 된다.

 

이런 설정 설정을 많이 해본 경험이 없어서 시도할 때 삽질도 많이 하고 비효율적인 일도 많이 하지만...

그래도 이런 여러 시도를 통해 한 걸음 더 나아갈 수 있을 거라 믿는다. 물론 스스로가 적극적으로 질문도 하고 따로 공부도 해야 한다는 점을 크게 느꼈고 말이다. 다시 기본 시작(설정)부터 나의 것으로 온전히 만들기 위해 차근차근 공부해나갈 필요가 있어 보인다.