Trong phần này chúng ta sẽ cùng tìm hiểu về Spring Cloud Configuaration.

Spring Cloud Configuration là một module trong hệ sinh thái Spring Cloud, cung cấp các công cụ để xây dựng các hệ thống phân tán và ứng dụng dịch vụ nhỏ. Spring Cloud Configuration tập trung cụ thể vào việc quản lý cấu hình của các ứng dụng trong một cách tập trung và linh hoạt.

1. Spring Cloud Config Serve

Đầu tiên chúng ta cần tạo 1 git repo để lưu trữ file config

Mục đích của việc này là để gom các hết tất cả các config trong hệ thống microservice lại 1 chỗ để dễ ràng cho việc quản lý và update chúng ta sẽ tạo config cho 2 service Auth và Zuul như sau: auth-service.yml

security:
  jwt:
    uri: /auth/**
    header: Authorization
    prefix: Bearer
    expiration: 86400
    secret: JwtSecretKey

Tương tự như vậy với zuul-server.yml

security:
  jwt:
    uri: /auth/**
    header: Authorization
    prefix: Bearer
    expiration: 86400
    secret: JwtSecretKey

Ở đây chúng ta cần lưu ý việc đặt tên file phải trùng với tên của service tương ứng với giá trị spring.application.name trong file application.yml việc đặt tên trùng để giúp cho Spring mapping đúng config cho từng service

Bước tiếp theo cần tạo project config-server sử dụng dependency như sau:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

Trong class main application sử dụng anotation @EnableConfigServer để khai báo đây là config server

@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
    
}

Ở trong file application.yml như sau:

server:
  port: 8888
spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: https://github.com/cuongvndev/config-files.git
          clone-on-start: true
        #   username: xxxx
        #   password: xxxx

Ở đây mình sẽ lưu config tại git repo. Hãy thêm username và password nếu cần khi bị lỗi authorize

Bây giờ chúng ta truy cập vào đường dẫn http://localhost:8888/auth-service.yml thì sẽ thấy kết quả như hình:

Config server

2. Config Client

Tiếp theo ở Auth service và Zuul Server gateway sẽ lấy thông tin config thông qua config server.

Thêm dependency config-client ở Auth service và Zuul Server:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
  • AuthServiceApplication
@SpringBootApplication
@EnableEurekaClient
@RefreshScope
public class AuthServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(AuthServiceApplication.class, args);
    }
}
  • ZuulServerApplication
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication.class, args);
    }
}

Sử dụng @RefreshScope trên một Spring Bean, bạn đang yêu cầu Spring Boot làm mới (refresh) lại bean đó khi có sự thay đổi cấu hình được áp dụng (thông qua cơ chế “Refresh Scope”). Điều này cho phép bạn cập nhật các giá trị cấu hình mà bean sử dụng mà không cần khởi động lại ứng dụng.

Thêm Spring cloud config uri trong Auth và Zuul server:

  • Auth-service
server:
  port: 8082

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: auth-service
  cloud:
    config:
      uri: http://localhost:8888
  • Zuul-server
server:
  port: 8080

zuul:
  routes:
    user-service:
      path: /user/**
      service-id: user-service
    product-service:
      path: /product/**
      service-id: product-service
    auth-service:
      path: /auth/**
      service-id: auth-service
      strip-prefix: false
      sensitive-headers: Cookie,Set-Cookie

spring:
  application:
    name: zuul-server
  cloud:
    config:
      uri: http://localhost:8888

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true

Việc config cho các service đã xong tiếp theo hãy chạy Auth và Zuul Server lên để testing nhé!