Trong bài này, bạn sẽ tìm hiểu Spring Cloud Config Server và bạn cũng có thể đọc 2 bài viết dưới đây mô tả các khả năng khởi động Spring Cloud và Spring khác như triển khai Eureka Server và Zipkin Server.
- Triển khai Máy chủ Eureka
- Triển khai máy chủ Zipkin
Máy chủ cấu hình đám mây mùa xuân là gì?
Spring Cloud Config Server là một ứng dụng tập trung dựa trên Spring quản lý cấu hình liên quan đến ứng dụng.
Spring Cloud Config là một ứng dụng khách-máy chủ để lưu trữ và phục vụ cấu hình phân tán trên nhiều môi trường và ứng dụng.
Trong kiến trúc microservices, có rất nhiều dịch vụ nhỏ và mỗi dịch vụ có cấu hình riêng, gây khó khăn cho việc quản lý cấu hình cho từng dịch vụ. Spring Cloud Config Server giải quyết vấn đề quản lý cấu hình bằng cách lưu trữ nó trên một kho lưu trữ tập trung và kho lưu trữ đó có thể là Git hoặc SVN. Một trong những lợi thế bạn có thể nhận được từ Spring Config Cloud Server là bất cứ khi nào bạn thực hiện bất kỳ thay đổi nào trong cấu hình, bạn không phải khởi động lại dịch vụ.
Để đạt được điều này, bạn cần tạo một ứng dụng Máy chủ cấu hình đám mây mùa xuân và thêm phần phụ thuộc bên dưới vào POM.xml .
Triển khai Spring Cloud Config Sever
Tạo ứng dụng máy chủ cấu hình đám mây mùa xuân
Điều hướng đến //start.spring.io/ và tạo một mẫu dự án. Cung cấp siêu dữ liệu của dự án như Group, Artifact và thêm các phụ thuộc / mô-đun bên dưới. Nhấp vào Tạo dự án và nó sẽ tải xuống dự án dựa trên .zip Spring và bạn có thể giải nén dự án đã tải xuống và nhập vào dự án Eclipse dưới dạng Maven.
- ConfigServer
- Web
- Bộ truyền động
POM.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example.spring.config.server</groupId> <artifactId>spring-config-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-config-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>Ứng dụng khởi động mùa xuân
Bây giờ bạn cần mở SpringConfigServerApplication.java và thêm chú thích @EnableConfigServer trên đầu lớp như hình dưới đây.
package com.example.spring.config.server.springconfigserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class SpringConfigServerApplication { public static void main(String[] args) { SpringApplication.run(SpringConfigServerApplication.class, args); } }Tệp thuộc tính ứng dụng
Bạn cần thêm danh sách bên dưới các thuộc tính trong application.properties nằm tại src / main / resources của ứng dụng của bạn.
spring.application.name=spring-cloud-config-server server.port=8888 spring.cloud.config.server.git.uri=file://F:\\Spring-boot\\git-localconfig-repospring.cloud.config.server.git.uri xác định đường dẫn của kho lưu trữ tập trung Git nơi lưu trữ tất cả tệp cấu hình microservices của bạn.
Trong trường hợp này, chúng tôi có một kho lưu trữ Git trên đĩa cục bộ. Vì vậy, chúng tôi đã đưa ra một đường dẫn vật lý cho thuộc tính spring.cloud.config.server.git.uri .
Bạn thậm chí có thể đề cập đến đường dẫn HTTP nếu Git có thể truy cập được qua giao thức http.
Chạy máy chủ cấu hình đám mây mùa xuân
Chạy Spring Cloud Config Server dưới dạng ứng dụng Java và điều hướng đến url // localhost: 8888 / config-client / default / master
Tích hợp ứng dụng khách với máy chủ cấu hình đám mây mùa xuân
Tạo Spring Boot Client Microservice
Bạn cần tạo một microservice Spring Boot, nó sẽ đọc 2 thuộc tính giới hạn tối đa và tối thiểu từ tệp thuộc tính và gửi phản hồi lại cho người tiêu dùng.
Tên dự án: giới hạn-dịch vụ
Lớp Spring Starter: LimitsServiceApplication
package com.example.config.limitsservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class LimitsServiceApplication { public static void main(String[] args) { SpringApplication.run(LimitsServiceApplication.class, args); } }Đổi tên tệp thuộc tính
Bạn cần đổi tên tệp application.properties thành bootstrap.properties nằm ở đường dẫn src / main / resources của dự án của bạn.
Thêm các thuộc tính bên dưới vào bootstrap.properties của bạn .
spring.application.name=limits-service server.port=8086 spring.cloud.config.uri=//localhost:8888 spring.profiles.active=devspring.cloud.config.uri xác định đường dẫn của máy chủ cấu hình đám mây mùa xuân.
spring.profiles.active xác định môi trường mà bạn cần để đọc tệp cấu hình.
POM.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.config</groupId> <artifactId>limits-service</artifactId> <version>1.0</version> <packaging>war</packaging> <name>limits-service</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>//repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>Tạo tệp thuộc tính ứng dụng
Bạn cần tạo tệp thuộc tính ứng dụng trong kho lưu trữ Git và tệp thuộc tính cần được tạo tại cùng đường dẫn Git mà bạn đã đề cập trong Máy chủ cấu hình đám mây mùa xuân (tức là F: \\ Spring-boot \\ git-localconfig-repo).
Tên tệp thuộc tính phải là {spring.application.name} - {môi trường} .properties . Dưới đây là một số ví dụ:
limit-service-dev.properties
limit-service-qa.properties
limit-service.properties
Máy chủ cấu hình đám mây mùa xuân sẽ truy cập tệp thuộc tính tùy thuộc vào spring.profiles.active mà bạn đã đặt trong bootstrap.properties .
Trong trường hợp, nếu bạn chưa xác định thuộc tính spring.profiles.active, nó sẽ đọc tệp thuộc tính mặc định limit-service.properties .
Thêm 2 thuộc tính bên dưới trong limit-service-dev.properties
limits-service.minimum=1 limits-service.maximum=11Thêm nhiều lớp hơn trong dự án
Thêm Configuration.java trong gói " com.example.config.limitsservice ". Nó sẽ chứa 2 thuộc tính mà bạn cần đọc từ tệp thuộc tính.
@ConfigurationProperties Chú thích cho cấu hình bên ngoài. Thêm điều này vào định nghĩa lớp hoặc một @Bean phương thức trong một @Configuration lớp nếu bạn muốn liên kết và xác thực một số Thuộc tính bên ngoài (ví dụ: từ tệp .properties).
package com.example.config.limitsservice; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties("limits-service") public class Configuration { private int maximum; private int minimum; public int getMaximum() { return maximum; } public void setMaximum(int maximum) { this.maximum = maximum; } public int getMinimum() { return minimum; } public void setMinimum(int minimum) { this.minimum = minimum; } }Thêm LimitConfiguration.java trong gói com.example.config.limitsservice . đậu
package com.example.config.limitsservice.beans; public class LimitConfiguration { private int maximum; private int minimum; protected LimitConfiguration() { super(); } public LimitConfiguration(int maximum, int minimum) { super(); this.maximum = maximum; this.minimum = minimum; } public int getMaximum() { return maximum; } public void setMaximum(int maximum) { this.maximum = maximum; } public int getMinimum() { return minimum; } public void setMinimum(int minimum) { this.minimum = minimum; } }Thêm LimitConfigurationController.java trong gói com.example.config.limitsservice
package com.example.config.limitsservice.beans; public class LimitConfiguration { private int maximum; private int minimum; protected LimitConfiguration() { super(); } public LimitConfiguration(int maximum, int minimum) { super(); this.maximum = maximum; this.minimum = minimum; } public int getMaximum() { return maximum; } public void setMaximum(int maximum) { this.maximum = maximum; } public int getMinimum() { return minimum; } public void setMinimum(int minimum) { this.minimum = minimum; } }Chạy dịch vụ giới hạn
Trước khi chạy ứng dụng, bạn cần đảm bảo Spring Cloud Config Server đang hoạt động. Chạy dịch vụ giới hạn dưới dạng ứng dụng Java và điều hướng đến // localhost: 8086 / giới hạn
Bật tự động làm mới cấu hình
Bạn cần thêm @RefreshScope chú thích vào LimitsConfigurationController như hình dưới đây.
package com.example.config.limitsservice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.in28minutes.microservices.limitsservice.bean.LimitConfiguration; @RestController @RefreshScope public class LimitsConfigurationController { @Autowired private Configuration configuration; @GetMapping(value="/limits") public LimitConfiguration retrieveLimitsFromConfiguration() { return new LimitConfiguration(configuration.getMaximum(),configuration.getMinimum()); } }@RefreshScope sẽ hiển thị một điểm cuối . Nó sẽ hữu ích bất cứ khi nào bạn thực hiện bất kỳ thay đổi nào về cấu hình trong Git, bạn có thể kích hoạt bằng cách sử dụng điểm cuối Spring Boot Actuator Refresh . Bạn cần thêm thuộc tính dưới đây trong bootstrap.properties của limit-service để kích hoạt điểm cuối làm mới bộ truyền động. /refresh RefreshScopeRefreshedEvent/actuator/refresh
management.endpoints.web.exposure.include=refreshTrong ví dụ này, bạn có thể làm mới cấu hình bằng cách sử dụng POST // localhost: 8086 / actuator / refresh. Trong trường hợp này, tôi đã cập nhật giá trị tối thiểu thành 3 và giá trị tối đa thành 333 trong giới hạn-service-dev.properties và điểm cuối kích hoạt / làm mới.
Bây giờ, bạn có thể kích hoạt // localhost: 8086 / giới hạn và bạn sẽ nhận thấy giá trị mới sẽ được phản ánh trong phản hồi.
Bạn đã nhận thấy rằng máy chủ cấu hình đọc các thuộc tính trong khi khởi động nhưng bạn cần kích hoạt điểm cuối / làm mới để phản ánh bất kỳ thay đổi nào trong thuộc tính hoặc bạn cần khởi động lại máy chủ cấu hình.
Bây giờ, bạn đã biết cách triển khai Máy chủ cấu hình đám mây mùa xuân.