Spring Cloud应用实现配置自动刷新过程详解

时间:2021-05-20

这篇文章主要介绍了Spring Cloud应用实现配置自动刷新过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

通过spring cloud 的消息总线,将配置github 等源代码仓库的变更通知到spring cloud 的所有组件。

spring-bus 需要用到rabbitmq ,所以需要提前准备rabbitmq消息队列环境

配置中心调整

1.配置中心配置引用pom

<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. 配置中心配置

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: admineureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: trueserver: port: 3636 management: endpoints: web: exposure: include: "*"

业务微服务中需要做的修改

1.添加pom

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

2. 配置文件

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 会使用 bus id 去匹配应用,匹配上才会刷新配置

3.编写测试代码

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@RefreshScopepublic 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(); }}

@RefreshScope 标记上才会被刷新配置

@RefreshScope 在Controller层使用,取不到值

利用githbu webhook 自动实现刷新配置:

Payload URL 需要添加config server 开放的monitor(monitor 为spring 自带地址) ,如果在内网,可以搜索内网穿透工具配置
修改仓库配置后,访问地址:http://localhost:8081/config-demo/get-env 地址也会发生改变

完整代码访问:https://github.com/halouprogramer/spring-cloud-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章