Spring Cloud Config là gì

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-repo

spring.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=dev

spring.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=11

Thê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=refresh

Trong 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.

Video liên quan

Chủ đề