Spring Boot 1.X 및 Spring Boot 2.X는 Externalized Configuration
.
M. Deinum의 좋은 대답은 Spring Boot 1 사양을 나타냅니다.
여기서 Spring Boot 2를 업데이트하겠습니다.
환경 속성 소스 및 순서
Spring Boot 2는 PropertySource
합리적인 값 재정의를 허용하도록 설계된 매우 특별한 순서를 사용합니다. 속성은 다음 순서로 고려됩니다.
홈 디렉토리의 Devtools 전역 설정 속성 (devtools가 활성화 된 경우 ~ / .spring-boot-devtools.properties).
@TestPropertySource
테스트에 대한 주석.
@SpringBootTest#properties
테스트의 주석 속성. 명령 줄 인수.
속성 SPRING_APPLICATION_JSON
(환경 변수 또는 시스템 속성에 포함 된 인라인 JSON).
ServletConfig
초기화 매개 변수.
ServletContext
초기화 매개 변수.
JNDI는에서 속성 java:comp/env
.
Java System 속성 ( System.getProperties()
).
OS 환경 변수.
RandomValuePropertySource
랜덤으로 만 속성이 있는 A. *.
패키지 된 jar ( application-{profile}.properties
및 YAML 변형) 외부의 프로필 별 애플리케이션 속성 .
jar ( application-{profile}.properties
및 YAML 변형) 내에 패키징 된 프로필 별 애플리케이션 속성 .
패키지 된 jar ( application.properties
및 YAML 변형) 외부의 애플리케이션 속성 .
jar ( application.properties
및 YAML 변형) 내에 패키지 된 애플리케이션 속성 .
@PropertySource
@Configuration
수업 에 대한 주석 . 기본 속성 (설정으로 지정됨
SpringApplication.setDefaultProperties
).
외부 속성 파일을 지정하려면 이러한 옵션이 중요합니다.
패키지 된 jar ( application-{profile}.properties
및 YAML 변형) 외부의 프로필 별 애플리케이션 속성 .
패키지 된 jar ( application.properties
및 YAML 변형) 외부의 애플리케이션 속성 .
@PropertySource
@Configuration
수업 에 대한 주석 . 기본 속성 (설정으로 지정됨
SpringApplication.setDefaultProperties
).
이 세 가지 옵션 중 하나만 사용하거나 요구 사항에 따라 조합 할 수 있습니다.
예를 들어 매우 간단한 경우에는 프로필 별 속성 만 사용하는 것으로 충분하지만 다른 경우에는 프로필 별 속성, 기본 속성 및 @PropertySource
.
application.properties 파일의 기본 위치
에 대한 application.properties
기본 봄로드 그들과 다음과 같은 순서로 이들의 환경에서 자신의 속성을 추가하여 파일 (및 변형) :
더 높은 우선 순위는 말 그대로 :
classpath:/,classpath:/config/,file:./,file:./config/
.
특정 이름을 가진 속성 파일을 사용하는 방법은 무엇입니까?
기본 위치가 항상 충분하지는 않습니다. 기본 파일 이름 ( application.properties
) 과 같은 기본 위치 는 적합하지 않을 수 있습니다. 게다가 OP 질문에서와 같이 application.properties
(및 변형) 이외의 여러 구성 파일을 지정해야 할 수도 있습니다 .
그래서 spring.config.name
충분하지 않을 것입니다.
이 경우 spring.config.location
환경 속성 (쉼표로 구분 된 디렉터리 위치 또는 파일 경로 목록)을 사용하여 명시 적 위치를 제공해야합니다 .
파일 이름 패턴에 대한 자유를 얻으려면 디렉토리 목록보다 파일 경로 목록을 선호하십시오.
예를 들어 다음과 같이하십시오.
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
이 방법은 폴더를 지정하는 것보다 가장 장황하지만 구성 파일을 매우 세밀하게 지정하고 효과적으로 사용되는 속성을 명확하게 문서화하는 방법이기도합니다.
spring.config.location은 이제 기본 위치를 추가하는 대신 대체합니다.
Spring Boot 1에서 spring.config.location
인수는 Spring 환경에서 지정된 위치를 추가합니다.
그러나 Spring Boot 2에서는 문서에spring.config.location
명시된대로 Spring 환경의 지정된 위치에서 Spring이 사용하는 기본 위치를 대체합니다 .
를 사용하여 사용자 지정 구성 위치를 구성
spring.config.location
하면 기본 위치가 대체됩니다. 예를 들어,이 spring.config.location
값으로 설정되어
classpath:/custom-config/
, file:./custom-config/
검색 순서는 다음이된다 :
file:./custom-config/
classpath:custom-config/
spring.config.location
이제 모든 application.properties
파일이 명시 적으로 지정되어야 하는지 확인하는 방법 입니다. 파일
을 패키징하지 않는 우버 JAR의 경우에는 application.properties
다소 좋습니다.
spring.config.location
Spring Boot 2를 사용하는 동안 의 이전 동작을 유지하려면 문서에 명시된대로 위치 를 추가하는 spring.config.additional-location
대신 새 속성을 사용할 수 있습니다 .spring.config.location
또는를 사용하여 사용자 지정 구성 위치를 구성
spring.config.additional-location
하면 기본 위치와 함께 사용됩니다.
실제로
따라서 OP 질문에서와 같이 지정할 외부 속성 파일 2 개와 uber jar에 포함 된 속성 파일 1 개가 있다고 가정합니다.
지정한 구성 파일 만 사용하려면 다음을 수행하십시오.
-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties
기본 위치에 구성 파일을 추가하려면 다음을 수행하십시오.
-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties
classpath:/applications.properties
마지막 예에서는 기본 위치에 필요하지 않으며 기본 위치는 여기에서 덮어 쓰지 않고 확장됩니다.
application.properties
항상,로드됩니다spring.config.location
당신이 파일을 체크 추가 구성 위치를 추가 할 수 있습니다 (그것으로 끝나는 경우 즉/
당신이 그이로드 될 파일이있는 점에 쉼표로 분리 된 목록을 넣어 그러나 경우). 이것은 Spring Boot Reference Guide에도 설명되어 있습니다