Câu trả lời:
Tôi vừa hỏi các Spring Cloud
bạn và nghĩ rằng tôi nên chia sẻ thông tin tôi có ở đây.
bootstrap.yml
được tải trước application.yml
.
Nó thường được sử dụng cho các mục sau:
spring.application.name
và spring.cloud.config.server.git.uri
bên trongbootstrap.yml
encryption/decryption
thông tinVề mặt kỹ thuật, bootstrap.yml
được tải bởi một cha mẹ Spring ApplicationContext
. Đó là cha mẹ ApplicationContext
được tải trước khi sử dụng application.yml
.
bootstrap.yml
không?
bootstrap.yml
hoặc là bootstrap.properties
Nó chỉ được sử dụng / cần thiết nếu bạn đang sử dụng Spring Cloud và cấu hình ứng dụng của bạn được lưu trữ trên một máy chủ cấu hình từ xa (ví dụ: Spring Cloud Config Server).
Từ tài liệu:
Ứng dụng Spring Cloud hoạt động bằng cách tạo bối cảnh "bootstrap", là bối cảnh chính cho ứng dụng chính. Ngoài hộp, nó chịu trách nhiệm tải các thuộc tính cấu hình từ các nguồn bên ngoài và cũng giải mã các thuộc tính trong các tệp cấu hình bên ngoài cục bộ.
Lưu ý rằng bootstrap.yml
hoặc bootstrap.properties
có thể chứa cấu hình bổ sung (ví dụ: mặc định) nhưng nhìn chung bạn chỉ cần đặt cấu hình bootstrap ở đây.
Thông thường, nó chứa hai thuộc tính:
spring.cloud.config.uri
)spring.application.name
)Khi khởi động, Spring Cloud thực hiện cuộc gọi HTTP đến máy chủ cấu hình với tên của ứng dụng và lấy lại cấu hình của ứng dụng đó.
application.yml
hoặc là application.properties
Chứa cấu hình ứng dụng tiêu chuẩn - cấu hình mặc định điển hình vì mọi cấu hình được truy xuất trong quá trình bootstrap sẽ ghi đè cấu hình được xác định tại đây.
Câu trả lời này đã được giải thích rất hay trong cuốn sách " Câu hỏi phỏng vấn microservice, dành cho nhà phát triển Java (Spring Boot, Spring Cloud, Cloud Native) của Munish Chandel , Phiên bản 1.30, 25.03.2018.
Nội dung sau đây đã được lấy từ cuốn sách này và tổng số tín dụng cho câu trả lời này được gửi đến Tác giả của cuốn sách, tức là Munish Chandel
application.yml
Tệp application.yml / application.properIES dành riêng cho các ứng dụng Spring Boot. Trừ khi bạn thay đổi vị trí của các thuộc tính bên ngoài của một ứng dụng, spring boot sẽ luôn tải application.yml từ vị trí sau:
/src/main/resources/application.yml
Bạn có thể lưu trữ tất cả các thuộc tính bên ngoài cho ứng dụng của bạn trong tệp này. Các thuộc tính phổ biến có sẵn trong bất kỳ dự án Spring Boot nào có thể được tìm thấy tại: https://docs.spring.io/spring-boot/docs/civerse/reference/html/common-application-properIES.html Bạn có thể tùy chỉnh các thuộc tính này như theo nhu cầu ứng dụng của bạn. Tệp mẫu được hiển thị dưới đây:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
mặt khác, bootstrap.yml dành riêng cho spring-cloud-config và được tải trước application.yml
bootstrap.yml chỉ cần thiết nếu bạn đang sử dụng Spring Cloud và cấu hình microservice của bạn được lưu trữ trên Máy chủ Cấu hình Spring Cloud từ xa.
Những điểm quan trọng về bootstrap.yml
spring.application.name: "tên ứng dụng" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: mùa xuân.cloud.config.uri:
Khi khởi động, Spring Cloud thực hiện cuộc gọi HTTP (S) đến Máy chủ cấu hình Spring Cloud với tên của ứng dụng và lấy lại cấu hình của ứng dụng đó.
application.yml chứa cấu hình mặc định cho microservice và mọi cấu hình được truy xuất (từ máy chủ cấu hình đám mây) trong quá trình bootstrap sẽ ghi đè cấu hình được xác định trong application.yml
Chỉ cần 2 Cents của tôi ở đây ..
Bootstrap.yml hoặc Bootstrap.properIES được sử dụng để tìm nạp cấu hình từ Spring Cloud Server.
Ví dụ: trong tệp Bootstrap.properIES của tôi, tôi có Cấu hình sau
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
Khi khởi động ứng dụng, Nó cố gắng tìm nạp cấu hình cho dịch vụ bằng cách kết nối với http: // localhost: 8888 và xem Tính toán-service.properies có trong máy chủ Spring Cloud Config
Bạn có thể xác thực tương tự từ nhật ký của Dịch vụ tính toán khi bạn khởi động nó
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Vâng, tôi hoàn toàn đồng ý với câu trả lời đã tồn tại ở điểm này:
bootstrap.yml
được sử dụng để lưu các tham số chỉ ra nơi cấu hình từ xa và Bối cảnh ứng dụng Bootstrap được tạo với các cấu hình từ xa này.Trên thực tế, nó cũng có thể lưu trữ các thuộc tính bình thường giống như những gì application.yml
làm. Nhưng hãy chú ý đến điều khó khăn này:
bootstrap.yml
, chúng sẽ có mức độ ưu tiên thấp hơn hầu hết các nguồn thuộc tính khác, bao gồm application.yml. Theo mô tả ở đây .Hãy làm rõ, có hai loại thuộc tính liên quan đến bootstrap.yml
:
bootstrap.yml
để tìm chủ sở hữu thuộc tính (Hệ thống tệp, kho git hoặc thứ gì khác) và các thuộc tính chúng tôi nhận được theo cách này có độ ưu tiên cao, do đó chúng không thể bị ghi đè bởi cấu hình cục bộ. Theo mô tả ở đây .bootstrap.yml
. Như được giải thích sớm, họ sẽ được ưu tiên thấp hơn. Sử dụng chúng để đặt mặc định có thể là một ý tưởng tốt.Vì vậy, sự khác biệt giữa việc đặt một tài sản trên application.yml
hoặc bootstrap.yml
trong khởi động mùa xuân là:
bootstrap.yml
.application.yml
sẽ được ưu tiên cao hơn.Bootstrap.yml được sử dụng để tìm nạp cấu hình từ máy chủ. Nó có thể cho một ứng dụng đám mây mùa xuân hoặc cho những người khác. Thông thường nó trông giống như:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Khi chúng tôi khởi động ứng dụng, nó cố gắng kết nối với máy chủ đã cho và đọc cấu hình dựa trên cấu hình mùa xuân được đề cập trong cấu hình chạy / gỡ lỗi.
Nếu máy chủ không truy cập được, ứng dụng thậm chí không thể tiếp tục. Tuy nhiên, nếu cấu hình phù hợp với cấu hình được trình bày cục bộ thì cấu hình máy chủ sẽ bị ghi đè.
Cách tiếp cận tốt:
Duy trì một hồ sơ riêng cho địa phương và chạy ứng dụng bằng các cấu hình khác nhau.
Một cách sử dụng khác cho bootstrap.yml là tải cấu hình từ cấu hình kubernetes và tài nguyên bí mật . Ứng dụng phải nhập phụ thuộc spring-cloud-starter-kubernetes .
Như với Spring Cloud Config, điều này phải diễn ra trong cụm từ bootstrap.
Từ các tài liệu:
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
Vì vậy, các thuộc tính được lưu trữ trong tài nguyên configmap với tên mặc định của meta.name có thể được tham chiếu giống như các thuộc tính trong application.yml
Và quy trình tương tự áp dụng cho các bí mật:
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
Bootstrap.ymal là tệp đầu tiên được tải khi bạn khởi động ứng dụng khởi động mùa xuân và application.property được tải khi ứng dụng khởi động. Vì vậy, bạn giữ, có thể là thông tin máy chủ cấu hình của bạn, v.v. trong bootstrap.ymal được yêu cầu trong khi tải ứng dụng và sau đó trong application.properations bạn giữ có thể là url cơ sở dữ liệu, v.v.
bootstrap.yml
theo như tôi có thể thấy cụ thể đối với [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/iêu )) và đó là cấu hình được sử dụng để tìm cấu hình phù hợp. Vì vậy, cấu hình có thể được tải trước application.properIES