24.3 응용 프로그램 속성 파일

SpringApplication은 다음 경로에 있는 application.properties 파일의 프라퍼티들을 가져와서 Spring Environment에 추가한다.

  1. 현재 디렉토리의 하위디렉토리인 /config

  2. 현재 디렉토리

  3. 클래스패스 상의 /config 패키지

  4. 루트 클래스패스

위의 목록은 우선순위 순이다 (목록의 상위에 정의한 프라퍼티들은 하위에 정의한 것을 우선한다.)

또한 '.properties'대신 YAML ( '.yml') 파일사용할 수 있습니다 .

파일명으로 application.properties말고 다른 것을 쓰려면 spring.config.name 환경 설정의 값으로 지정하면된다. 또 spring.config.location 환경설정을 사용해 명시적으로 위치를 지정할 수 있다. (디렉토리 위치나 파일 경로를 여러개 설정할 경우 구분자로 쉼표를 사용한다.) 다음 예제는 다른 파일명을 명시하는 방법을 보여준다.

$ java -jar myproject.jar --spring.config.name=myproject

다음 예제는 두개의 경로를 어떻게 지정하는지 보여준다.

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.name과 `spring.config.location'은 어떤 파일들을 로드할지 결정해야 하기 때문에 일찍 사용된다. 그래서 환경 설정Property으로 정의해야만 한다. (일반적으로 OS 환경변수, 시스템 프라퍼티 또는 Command line 인수)

spring.config.location가 디렉토리들(파일의 반대의 의미로)을 지정하면 /로 끝나도록 해야 한다. (그렇게 실행하면 로딩전에 프로필-관련 파일이름을 포함한 spring.config.name의 파일명이 뒤에 붙는다.) spring.config.location에 명시한 파일명은 프로파일 관련 변경 지원 없이 그대로 사용하고 모든 프로파일 관련 프라퍼티들을 덮어쓴다.

설정 위치는 작성된 역순으로 찾는다. 기본적인 설정 위치는 classpath:/, classpath:/config/, file:./, file:./config/ 이다. 검색 순서 결과는 다음과 같다.

  1. file:./config/

  2. file:./

  3. classpath:/config/

  4. classpath:/

spring.config.location을 사용해 사용자 정의 위치를 설정하면 그 설정이 기본 위치를 대신한다. 예를 들어 spring.config.locationclasspath:/custom-config/,file:./custom-config/을 설정하면, 검색 순서는 다음과 같다.

  1. file:./custom-config/

  2. classpath:custom-config/

spring.config.additional-location을 사용해 사용자정의 설정 위치를 지정하면, 기본 위치에 추가되어 사용된다. 추가 위치는 기본 위치 전에 검색된다. 예를 들어 classpath:/custom-config/,file:./custom-config/을 추가 위치로 설정하면, 검색 순서는 다음과 같다.

  1. file:./custom-config/

  2. classpath:custom-config/

  3. file:./config/

  4. file:./

  5. classpath:/config/

  6. classpath:/

이 검색순서를 이용하면 하나의 설정파일에 기본 설정 값들을 명시해서 선택적으로 다른 값으로 대체할 수 있다. 어플리케이션을 위한 기본값들은 기본 경로중 한 곳에 있는 application.properties파일(또는 spring.config.name으로 선택한 다른 기반이름basename)로 제공할 수있다. 이 기본값들은 실행시 사용자정의 경로 중 하나에 있는 다른 파일로 대체될 수 있다.

시스템 프라퍼티 말고 환경변수를 사용하는 경우, 대부분의 운영체제는 키 이름을 .으로 구분하는 것을 허용하지 않는다. 그래서 . 대신 _을 사용한다. (예를 들어 spring.config.name은 대신 SPRING_CONFIG_NAME으로 한다.

만약 어플리케이션이 컨테이너에서 실행된다면 jndi 프라퍼티(java:comp/env 안의)나 Servlet Context 초기파라미터가 환경변수나 시스템 프라퍼티 대신(또는 뿐만 아니라) 사용될 수 있다.

Last updated