Detailed explanation of spring cloud application implementation configuration automatic refresh process

This article mainly introduces the detailed explanation of the automatic refresh process of spring cloud application configuration. It is introduced in great detail through the example code, which has certain reference value for everyone's study or work. Friends in need can refer to it

Through the message bus of spring cloud, notify all components of spring cloud of changes in source code warehouses such as GitHub configuration.

Spring bus needs rabbitmq, so you need to prepare rabbitmq message queue environment in advance

Configuration center adjustment

1. Configure reference POM in configuration center

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

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

2. Configuration center configuration

spring:
 application:
  name: spring-config
 cloud:
  config:
   server:
    git:
     uri: https://github.com/halouprogramer/spring-config-repository.git
#     username: ***
#     password: ***
     basedir: ~/temp/gitlab
 rabbitmq: #增加rabbitmq的配置
  host: 192.168.114.129
  port: 5672
  username: admin
  password: admin
eureka:
 client:
  service-url:
   defaultZone: http://localhost:8761/eureka/
 instance:
  prefer-ip-address: true
server:
 port: 3636

management:
 endpoints:
  web:
   exposure:
    include: "*"

Modifications to be made in business microservices

1. Add POM

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2. Configuration file

spring:
 application:
  name: spring-school
 cloud:
  config:
   discovery:
    enabled: true
    service-id: SPRING-CONfig
   profile: dev
  bus: #bus id 不能使用默认,否则不能刷新
   id: ${spring.application.name}:${spring.cloud.config.profile}:${random.value}
 profiles:
  active: dev
 rabbitmq:
  host: 192.168.114.129
  port: 5672
  username: admin
  password: admin

eureka:
 client:
  service-url:
   defaultZone: http://localhost:8761/eureka/
 instance:
  prefer-ip-address: true

#配置超时时间
feign:
 client:
  config:
   default:
    connectTimeout: 5000
    readTimeout: 5000
#    logger-level: bus

Spring cloud bus will use the bus ID to match the application, and the configuration will be refreshed on the matching

3. Write test code

package com.lvlvstart.spring.demo.school.service;

import com.lvlvstart.spring.demo.school.dao.SchoolRepository;
import com.lvlvstart.spring.demo.school.entity.School;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * @author zishu.lv@baodanyun-inc.com
 * @description 类描述
 * @create 2019/12/9 15:53
 */
@Service
@RefreshScope
public class SchoolService {

  @Value("${env}")
  private String env;

  @Autowired
  private SchoolRepository repository;

  public List<School> findAll(){
    return repository.findAll();
  }

  public School findById(String choolId){
    Optional<School> school = repository.findById(choolId);
    if(school.isPresent()){
      return school.get();
    }
    return null;
  }

  public String getEnv(){
    return env;
  }

}
package com.lvlvstart.spring.demo.school.web;

import com.lvlvstart.spring.demo.school.service.SchoolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("config-demo")
public class ConfigDemoController {

  @Autowired
  private SchoolService schoolService;

  @GetMapping("get-env")
  private String getEnv(){
    return schoolService.getEnv();
  }
}

@The configuration will only be refreshed on the refreshscope tag

@Refreshscope is used in the controller layer and cannot get a value

Automatic refresh configuration with githbu webhook:

The payload URL needs to add a monitor opened by config server (the monitor is the spring's own address). If it is on the intranet, you can search the intranet penetration tool configuration. After modifying the warehouse configuration, access the address: http://localhost:8081/config -The demo / get env address will also change

Full code access: https://github.com/halouprogramer/spring-cloud-demo

The above is the whole content of this article. I hope it will help you in your study, and I hope you will support us a lot.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>