24. 외부화된 구성 by ys

스프링 부트는 환경 설정을 외부에 할 수있게 해서 같은 어플리케이션 코드를 다른 환경에서 사용할 수있게 한다. 외부 환경 설정을 하기 위해 Properties 파일들, YAML 파일들, 환경변수들 그리고 Command-Line 인수들을 사용할 수 있다. 설정된 프라퍼티들은 @Value를 사용해 직접 빈들에 주입할 수도 있고, 스프링의 Environment 추상을 통해 접근하거나 @ConfigurationProperties를 통해 구조화된 객체에 묶일 수도 있다.

스프링 부트는 값들을 합리적으로 재정의하도록 설계한 매우 특별한 PropertySource 순서를 사용한다. 프라퍼티들은 다음 순서대로 적용된다.

  1. 홈 디렉토리상의 Devtools의 전역설정 프라퍼티(devtools가 실행 중일때 ~/.spring-boot-devtools.properties)

  2. 테스트 할 때 @TestPropertySource 어노테이션

  3. 테스트 할 때 @SpringBootTest#properties 어노테이션

  4. Command-Line 인수

  5. SPRING_APPLICATION_JSON에 설정된 프라퍼티들(환경변수나 시스템 프라퍼티 내장된 inline JSON)

  6. ServletConfig 초기파라미터

  7. ServletContext 초기파라미터

  8. java:comp/env로 부터의 JNDI 속성

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

  10. 운영체제 환경변수

  11. random.* 형태의 프라퍼티들만 가지고 있는 RandomValuePropertySource

  12. 패키지된 jar 파일 외부의 프로파일 관련 어플리케이션 프라퍼티들(application-{profile}.properties와 YAML 문서)

  13. 패키지된 jar 파일 내부의 프로파일 관련 어플리케이션 프라퍼티들(application-{profile}.properties와 YAML 문서)

  14. 패키지된 jar 파일 외부의 어플리케이션 프라퍼티들 (application.properties와 YAML 문서)

  15. 패키지된 jar 파일 내부의 어플리케이션 프라퍼티들 (application.properties와 YAML 문서)

  16. @Configuration클래스에 선언한 @PropertySource 어노테이션

  17. 기본 프라퍼티들 (SpringApplication.setDefaultProperties를 사용해 작성된)

구체적인 예제를 제공하기 위해, name 프라퍼티를 사용하는 @Component를 다음 예제와 같이 개발하고 있다고 가정한다.

어플리케이션의 클래스패스(jar파일 내)상에 application.properties 파일이name에 대한 유용한 기본 프라퍼티 값을 제공할 수있다. 새로운 환경에서 실행될 때, name을 재정의한 application.properties 파일이 jar파일 외부에서 제공될 수도 있다. 일회성 테스트를 위해 시작할 때 Command-Line 인수를 이용해 전달 할 수 있다. (예를 들어 java -jar app.jar --name="Spring").

[팁]

SPRING_APPLICATION_JSON 프라퍼티는 환경변수로 Command line상에서 제공될 수 있다. 예를 들어 다음 라인을 UNI*X 쉘에서 사용할 수있다. $ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar 위 예가 실행되면, 스프링 Environment에서는 acme.name=test로 된다. JSON을 시스템 프라퍼티에서 spring.application.json을 사용해 다음 예처럼 제공할 수도 있다. $ java -Dspring.application.json='{"name":"test"}' -jar myapp.jar JSON을 Command-line 인수를 사용해 다음 예 처럼 제공할 수도 있다. $ java -jar myapp.jar –spring.application.json='{"name":"test"}' 다음과 같이 JNDI 변수를 이용해 JSON을 제공을 할 수도 있다. java:comp/env/spring.application.json

Last updated

Was this helpful?