[Gradle] gradle 빌드 시 설정 파일 독립 시키기

Web 개발러 Velog!·2022년 1월 7일
0

Spring boot에는 서버가 내장되어 있어 별도의 Web 컨테이너 도구 없이 Jar 파일로 실행이 가능하다. 그러나 properties 파일 내 변경이 있을 경우 다시 빌드하여야 하는 불편함이 존재할 수 있다! 따라서, 본 포스팅에서는 properties 파일을 외부에서 읽을 수 있도록 하고자 한다.

일반적인 Spring boot 프로젝트에서는 application.yml 같은 설정 파일을 가지고 있으며 profile 별로 환경을 나눠서 실행 가능하다. 이러한 설정파일은 Spring boot 실행 시 아래와 같은 우선순위로 읽기를 시도한다.

  1. 홈 디렉터리(개발 도구가 활성화된 경우 ~/.spring-boot-devtools.properties)의 개발 도구 전역 설정 프로퍼티

  2. 테스트의 @TestPropertySource 어노테이션.

  3. 테스트의 properties 애트리뷰트. @SpringBootTest와 애플리케이션의 특정 부분을 테스트하기 위한 테스트 어노테이션에서 사용 가능.

  4. 커맨드 라인 인자.

  5. SPRING_APPLICATION_JSON의 프로퍼티(환경 변수나 시스템 프로퍼티에 삽입된 인라인 JSON).

  6. ServletConfig 초기 파라미터.

  7. ServletContext 초기 파라미터.

  8. java:comp/env의 JNDI 애트리뷰트.

  9. Java 시스템 프로퍼티(System.getProperties()).

  10. OS 환경 변수

  11. random.* 에 프로퍼티를 가진RandomValuePropertySource.

  12. 패키지된 jar 외부의 프로파일 지정 애플리케이션 프로퍼티(application-{profile}.properties와 YAML 형식).

  13. 패키지된 jar 내부의 프로파일 지정 애플리케이션 프로퍼티(application-{profile}.properties와 YAML 형식).

  14. 패키지된 jar 외부의 애플리케이션 프로퍼티(application-{profile}.properties와 YAML 형식).

  15. 패키지된 jar 내부의 애플리케이션 프로퍼티(application-{profile}.properties와 YAML 형식).

  16. @Configuration 클래스의 @PropertySource 어노테이션

  17. (SpringApplication.setDefaultProperties에 의해 명시된) 기본 프로퍼티.

또한, 설정 파일의 위치에 따라서도 아래와 같은 우선순위를 갖는다.
1. file:./config/ (현재 디렉토리의 /config 디렉토리)
2. file:./ (현재 디렉토리)
3. classpath:/config/ (루트 디렉토리의 /config 디렉토리)
4. classpath:/ (루트 디렉토리)

결론적으로...

이러한 설정 파일을 읽는 우선순위에 따라 Spring boot의 jar 파일 실행 시 설정 파일의 위치를 인자값으로 주면 외부에서도 읽을 수 있게 된다.

ex)
java -jar -Dspring.config.location=../config/application.yml -Dspring.profiles.active=test app.jar
profile
while(true) { 손가락 관절염++ };

0개의 댓글