본문 바로가기
[개발] 프로그래밍/Web, Spring, Java

[Spring Boot] application.properties 설정을 jar 파일 외부에서 주입

by 안산학생 2021. 5. 21.

Spring Boot에서 application.properties 설정을 jar 파일 외부에서 설정하는 방법입니다.

 

application.properties 설정은 우선순위가 존재합니다.

우선순위는 다음과 같습니다.

 


 

  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에 의해 명시된) 기본 프로퍼티.

 


 

저는 12, 14번을 이용했습니다.

 

spring.profiles.active=local

application.properties의 기본 코드입니다.

 

저는 프로젝트에 따라 값이 { local, A, B, C } 값이 들어가야합니다. 개발용은 local값, A고객사라면 A값, B고객사라면 B값이 들어가야하는데요. 상황에 따라 각각의 설정을 변경할 필요 없이 실행할 때 외부에서 설정할 수 있는 위와 같은 방법을 사용했습니다.

 

 


 

 

1. 패키지된 jar 외부의 프로파일 지정 애플리케이션 프로퍼티

spring.profiles.active=${name:test}

application.propertie 파일에서 ${name:test} 로 값을 설정한 뒤

 

java -jar 위치/파일명.jar --name=값

터미널에서 jar를 실행할 때 변수에 대한 값을 입력합니다. (JSON형식으로 입력가능)

 

spring.profiles.active=값

실행하게 되면 위와 같은 값이 주입된 application.propertie 파일이 설정됩니다.

 


 

2. 패키지된 jar 외부의 애플리케이션 프로퍼티

spring.profiles.active=local

설정하고자 하는 내용을 입력한 application.propertie을 생성합니다. 해당 파일은 jar와 같은 폴더에 놓습니다.

 

 

java -jar 위치/파일명.jar

터미널에서 jar파일을 실행하게 되면 jar파일이 있는 폴더에 application.properties을 참조합니다. (jar파일 내부 application.properties에 덮어쓰기)

 

 


 

참고로 다양한 방법이 있으니, 우선 순위를 고려하여 사용해야할 것 같습니다.

댓글