스프링 부트에서 application.yml 또는 bootstrap.yml에 속성을 넣는 것의 차이점은 무엇입니까?


251

스프링 부트에서 application.yml 또는 bootstrap.yml에 속성을 넣는 것의 차이점은 무엇입니까? logging.config의 경우 응용 프로그램이 다르게 작동합니다.


14
bootstrap.yml [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… ) 에만 해당되는 한 올바른 구성을 찾는 데 사용되는 구성입니다. 따라서 구성은 application.properties/yaml 전에로드 될 것입니다
zapl

답변:


297

나는 방금 Spring Cloud남자들 에게 물었고 나는 여기에있는 정보를 공유해야한다고 생각했습니다.

bootstrap.yml전에로드 application.yml됩니다.

일반적으로 다음에 사용됩니다.

  • 봄 클라우드 구성 서버를 사용하는 경우, 당신은 지정해야합니다 spring.application.namespring.cloud.config.server.git.uri내부bootstrap.yml
  • 일부 encryption/decryption정보

기술적 bootstrap.yml으로 부모 Spring에 의해로드됩니다 ApplicationContext. 해당 부모는를 사용하는 부모 ApplicationContext보다 먼저로드 application.yml됩니다.


6
Config Server에서 이러한 매개 변수를 입력해야하는 이유를 설명해 주 bootstrap.yml시겠습니까?
Neo

31
Spring Cloud를 사용할 때 '실제'구성 데이터는 일반적으로 서버에서로드됩니다. URL (및 암호 등의 다른 연결 구성)을 얻으려면 이전 또는 "부트 스트랩"구성이 필요합니다. 따라서 설정 서버 속성을 bootstrap.yml에 저장하면 실제 구성 데이터를로드하는 데 사용됩니다 (일반적으로 application.yml [있는 경우]의 내용을 재정의 함).
Mike Mansell 1

10
때로는 스프링이 새로운 흥미로운 기능을 제공 할 때 궁금합니다. 사양보다 컨벤션 뒤에 남거나 이미 컨벤션을 가정 할 필요가 없으며 아무것도 지정할 필요가 없으며 스프링으로 부팅하지 않으면 스프링 부팅으로 모든 것이 자체적으로 해결되며 향후 봄에있을 수 있습니다. boot-boot;)
Saurabh

말할 때 bootstrap.yml은 application.yml 전에로드됩니다. 그러나 application.yml을 제거하면 내 응용 프로그램은 bootstrap.yml을 읽지 않습니다. 왜 그런 겁니까?
Jesse

부트 스트랩 파일이 우선 순위가 높기 때문에 대체하지 않는다는 점을 강조해야합니다. 문서 팀의 봄
kelgwiin에 따르면

84

bootstrap.yml 또는 bootstrap.properties

Spring Cloud를 사용 중이고 애플리케이션 구성이 원격 구성 서버 (예 : Spring Cloud Config 서버)에 저장된 경우에만 사용 / 필요합니다 .

설명서에서 :

Spring Cloud 애플리케이션은 메인 애플리케이션의 상위 컨텍스트 인 "부트 스트랩"컨텍스트를 작성하여 작동합니다. 즉시 외부 소스에서 구성 특성을로드 하고 로컬 외부 구성 파일의 특성을 해독해야합니다.

참고 그 bootstrap.yml또는 bootstrap.properties 수있는 추가 구성 (예 : 기본값)하지만, 일반적으로는 여기 부트 스트랩 설정을 둘 필요가 포함되어 있습니다.

일반적으로 두 가지 속성이 있습니다.

  • 구성 서버의 위치 ( spring.cloud.config.uri)
  • 응용 프로그램 이름 ( spring.application.name)

시작시 Spring Cloud는 애플리케이션 이름으로 구성 서버를 HTTP 호출하고 해당 애플리케이션의 구성을 다시 검색합니다.

application.yml 또는 application.properties

표준 애플리케이션 구성을 포함합니다. 부트 스트랩 프로세스 중에 검색된 구성이 여기에 정의 된 구성보다 우선하기 때문에 일반적으로 기본 구성입니다.


34

이 답변은 매우 아름답게 "책에서 설명하고있다 자바 개발자 (봄 부팅, 봄 클라우드, 클라우드 네이티브 응용 프로그램)의 경우, Microservices의 인터뷰 질문 에 의해 Munish Chandel , 버전 1.30, 2018년 3월 25일.

다음 내용은이 책에서 가져 왔으며이 답변에 대한 총 학점은 책의 저자 즉 Munish Chandel에게 있습니다.

application.yml

application.yml / application.properties 파일은 스프링 부트 애플리케이션에 따라 다릅니다. 애플리케이션의 외부 속성 위치를 변경하지 않으면 스프링 부트는 항상 다음 위치에서 application.yml 을 로드 합니다 .

/src/main/resources/application.yml

이 파일에 응용 프로그램의 모든 외부 속성을 저장할 수 있습니다. 모든 Spring Boot 프로젝트에서 사용할 수있는 일반적인 속성은 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 에서 확인할 수 있습니다. 응용 프로그램 요구에 따라. 샘플 파일은 다음과 같습니다.

spring:
    application:
        name: foobar
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/test
server:
    port: 9000

bootstrap.yml

반면 bootstrap.ymlspring-cloud-config 에만 적용 되며 응용 프로그램 전에로드 됩니다.

bootstrap.yml 은 스프링 클라우드를 사용하고 마이크로 서비스 구성이 원격 스프링 클라우드 구성 서버에 저장된 경우에만 필요합니다.

bootstrap.yml에 대한 중요 사항

  1. Spring Cloud Config 서버와 함께 사용하는 경우 아래 속성을 사용하여 application-name 및 config git 위치를 지정해야합니다.
spring.application.name : "애플리케이션 이름"
spring.cloud.config.server.git.uri : "git-uri-config"

  1. 마이크로 서비스 (클라우드 구성 서버 이외)와 함께 사용하는 경우 아래 속성을 사용하여 구성 서버의 응용 프로그램 이름과 위치를 지정해야합니다.
spring.application.name : 
spring.cloud.config.uri : 
  1. 이 특성 파일에는 eureka 서버 위치, 암호화 / 암호 해독 관련 특성과 같은 Spring Cloud 환경과 관련된 기타 구성이 포함될 수 있습니다.

시작시 Spring Cloud는 애플리케이션 이름으로 스프링 클라우드 구성 서버에 HTTP (S) 호출을 수행하고 해당 애플리케이션의 구성을 검색합니다.

application.yml에는 마이크로 서비스에 대한 기본 구성이 포함되어 있으며 부트 스트랩 프로세스 중에 검색된 구성 (클라우드 구성 서버에서)은 application.yml에 정의 된 구성보다 우선합니다.


5

여기 내 2 센트 만 ..

Bootstrap.yml 또는 Bootstrap.properties는 Spring Cloud Server에서 구성을 가져 오는 데 사용됩니다.

예를 들어, Bootstrap.properties 파일에 다음 구성이 있습니다

spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888

응용 프로그램을 시작할 때 http : // localhost : 8888 에 연결하여 서비스 구성을 가져 오려고 시도하고 Spring Cloud Config 서버에있는 Calculation-service.properties를 봅니다.

시작할 때 Calcuation-Service 로그에서 동일한 내용을 확인할 수 있습니다

INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888


4

글쎄, 나는이 시점에서 이미 존재하는 답변에 전적으로 동의합니다.

  • bootstrap.yml원격 구성이있는 위치를 나타내는 매개 변수를 저장하는 데 사용 되며 이러한 원격 구성으로 부트 스트랩 응용 프로그램 컨텍스트 가 작성됩니다.

실제로 일반 속성과 동일한 속성을 저장할 수도 있습니다 application.yml. 그러나이 까다로운 것에주의하십시오.

  • 에 속성을 배치하면 bootstrap.ymlapplication.yml을 비롯한 거의 모든 속성 소스보다 우선 순위가 낮아집니다. 여기에 설명 된대로 .

다음과 같은 두 가지 유형의 속성이 있습니다 bootstrap.yml.

  • 부트 스트랩 단계에서로드되는 특성. 우리 bootstrap.yml는 속성 홀더 (파일 시스템, 자식 저장소 또는 다른 것)를 찾는 데 사용 하며, 이런 방식으로 얻는 속성은 우선 순위가 높으므로 로컬 구성으로 재정의 할 수 없습니다. 여기에 설명 된대로 .
  • 에있는 속성입니다 bootstrap.yml. 초기에 설명했듯이 우선 순위가 낮습니다. 그것들을 사용하여 기본값을 설정하는 것이 좋습니다.

따라서 스프링 부팅 application.yml또는 속성 bootstrap.yml부팅 의 차이점 은 다음과 같습니다.

  • 부트 스트랩 단계에서 구성 파일을로드하기위한 특성은에만 배치 할 수 있습니다 bootstrap.yml.
  • 다른 모든 종류의 속성 application.yml은 우선 순위가 높아집니다.

3

Bootstrap.yml은 서버에서 구성을 가져 오는 데 사용됩니다. Spring 클라우드 애플리케이션 또는 다른 애플리케이션을위한 것일 수 있습니다. 일반적으로 다음과 같습니다.

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

응용 프로그램을 시작하면 주어진 서버에 연결을 시도하고 실행 / 디버그 구성에 언급 된 스프링 프로파일을 기반으로 구성을 읽습니다. bootstrap.yml이 첫 번째를로드합니다

서버에 도달 할 수없는 경우 응용 프로그램이 더 이상 진행되지 않을 수도 있습니다. 그러나 프로파일과 일치하는 구성이 로컬로 존재하면 서버 구성이 대체됩니다.

좋은 접근 방식 :

로컬에 대해 별도의 프로필을 유지하고 다른 프로필을 사용하여 앱을 실행하십시오.


1

bootstrap.yml의 또 다른 용도 는 kubernetes configmapsecret 리소스 에서 구성을로드하는 것 입니다. 애플리케이션은 spring-cloud-starter-kubernetes 종속성을 가져와야 합니다.

Spring Cloud Config와 마찬가지로 부트 스트랩 문구 동안이 작업을 수행해야합니다.

문서에서 :

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      config:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a ConfigMap named c1 in namespace default-namespace
         - name: c1

따라서 meta.name default-name으로 configmap 자원에 저장된 특성은 application.yml의 특성과 동일하게 참조 될 수 있습니다.

그리고 동일한 프로세스가 비밀에 적용됩니다.

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      secrets:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
         - name: s1

0

Bootstrap.yml은 스프링 부트 응용 프로그램을 시작할 때 처음로드 된 파일이며 응용 프로그램이 시작될 때 application.property가로드됩니다. 따라서 응용 프로그램을로드하는 동안 필요한 bootstrap.yml에 구성 서버의 자격 증명 등이있을 수 있습니다. 그런 다음 application.properties에 데이터베이스 URL 등이있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.