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

这篇文章主要介绍了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: admin
eureka:
 client:
  service-url:
   defaultZone: http://localhost:8761/eureka/
 instance:
  prefer-ip-address: true
server:
 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
@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();
  }
}

@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

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

(0)

相关推荐

  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传.其实ajaxfileupload文件上传特别的简单.下面就演示一下在SpringMVC中实现ajax的文件上传. 1.后台接收代码 首先在spring的配置文件中添加文件上传配置 <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commo

  • SpringCloud之动态刷新、重试、服务化的实现

    假如说我们的配置从远程仓库获取失败了,那么该如何去处理呢?这里就要使用到 Spring Cloud Config 为我们提的动态刷新重试功能了,Spring Cloud Config 是服务化的.那么什么是服务化呢? 服务化 我们在前面的配置中,当 Config Client 需要从 Config Server 上获取配置数据时,我们都是直接在 Config Client 的配置文件中写上 Config Server 的地址,类似下面这种架构: 这种写法相当于将 Config Client 和

  • SpringCloud配置刷新原理解析

    我们知道在SpringCloud中,当配置变更时,我们通过访问http://xxxx/refresh,可以在不启动服务的情况下获取最新的配置,那么它是如何做到的呢,当我们更改数据库配置并刷新后,如何能获取最新的数据源对象呢?下面我们看SpringCloud如何做到的. 一.环境变化 1.1.关于ContextRefresher 当我们访问/refresh时,会被RefreshEndpoint类所处理.我们来看源代码: /* * Copyright 2013-2014 the original a

  • Spring Cloud 动态刷新配置信息教程详解

    有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢? 添加依赖 <dependencies> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ... </dependencies>

  • springMVC+velocity实现仿Datatables局部刷新分页方法

    因为项目中之前的模块用的分页插件是Datatables,很方便,但是新做的模块表格中的布局有变化,Datatables插件满足不了了.为了风格的统一,同时也不希望查询参数再传递回显在页面上,所以就采用局部刷新分页的实现方案. 实现方案是这样的,将表格部分提取出来,用来作为页面局部刷新的部分,文件名为list-data.vm <table class="table text-center table_acolor"> <thead> <tr> <

  • Spring实现上拉刷新和下拉加载效果

    本文实例为大家分享了Spring实现上拉刷新和下拉加载效果,供大家参考,具体内容如下 导依赖: compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.liaoinstan.springview:library:1.3.0' compile files('libs/glide-3.7.0.jar') activity_main布局 <?xml version="1.0" encoding="ut

  • SpringMVC结合ajaxfileupload.js实现文件无刷新上传

    直接看代码吧,注释都在里面 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc

  • spring boot 配置动态刷新实现详解

    本文测试使用的spring cloud版本为: Dalston.SR1 很多朋友只知道spring cloud config可以刷新远程git的配置到内存中, 却不知道spring cloud config的客户端可以脱离服务端使用, 更不知道spring cloud config客户端结合actuator还可以刷新本地的配置文件到内存中. 具体做法如下: 1.pom: <?xml version="1.0" encoding="UTF-8"?> <

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

    这篇文章主要介绍了Spring Cloud应用实现配置自动刷新过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过spring cloud 的消息总线,将配置github 等源代码仓库的变更通知到spring cloud 的所有组件. spring-bus 需要用到rabbitmq ,所以需要提前准备rabbitmq消息队列环境 配置中心调整 1.配置中心配置引用pom <dependency> <groupId>org.

  • spring cloud alibaba Nacos 注册中心搭建过程详解

    这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 nacos下载地址 什么是 Nacos? nacos主要起到俩个作用一个是注册中心,另外一个是配置中心. 下面图 是nacos的功能结构图 运行环境 JDK 1.8+: Maven 3.2.x+: 下载 你可以通过源码和发行包两种方式来获取 Nacos. nacos发行包下载地址 选择版本解压 unzip

  • Spring Cloud Config分布式配置中心使用介绍详解

    目录 1.分布式配置中心应用场景 2.Spring Cloud Config 2.1.Config简介 2.2.Config分布式配置应用 2.3.构建Config Server统一配置中心 2.4.构建Client客户端(在已有简历微服务基础上) 1.分布式配置中心应用场景 往往,我们使用配置文件管理⼀些配置信息,比如application.yml 单体应用架构:配置信息的管理.维护并不会显得特别麻烦,手动操作就可以,因为就一个工程: 微服务架构:因为我们的分布式集群环境中可能有很多个微服务,

  • Spring IoC学习之ApplicationContext中refresh过程详解

    refresh() 该方法是 Spring Bean 加载的核心,它是 ClassPathXmlApplicationContext 的父类 AbstractApplicationContext 的一个方法 , 顾名思义,用于刷新整个Spring 上下文信息,定义了整个 Spring 上下文加载的流程. public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShu

  • Spring Cloud Eureka 注册与发现操作步骤详解

    在搭建Spring Cloud Eureka环境前先要了解整个架构的组成,常用的基础模式如下图: 服务提供者:将springboot服务编写好以后,通过配置注册中心地址方式注册,提供给消费者使用. 注册中心:服务的中间桥梁,服务提供者将服务注册.服务消费者可以通过注册信息调用需要使用的服务. 服务消费者:通过规定的调用方式,读取注册中心的注册信息,调用相应的服务. 根据后续的服务复杂度进化以后,可以看到服务提供者也可以是服务消费者,服务消费者也可以是服务提供者.根据不同的业务情况是可以互相调用的

  • Spring cloud alibaba之Gateway网关功能特征详解

    目录 1.网关简介 2.什么是spring cloud gateway 2.1核心概念 3.Spring Cloud Gateway快速开始 5.路由断言工厂(Route Predicate Factories)配置 6.自定义路由断言工厂 7.Filter过滤器 8.自定义过滤器 9.自定义全局过滤器(Global Filters) 10.Gateway跨域配置(CORS Configuration) 11.Gateway整合Sentinel进行流控 12.流控配置说明 13.自定义重写流控返

  • Spring Cloud负载均衡及远程调用实现详解

    负载均衡 使用微服务后,为了能够承担高并发的压力,同一个服务可能会启动多个实例.这时候消费者就需要负载均衡,把请求分散到各个实例.负载均衡主要有两种设计: 服务端负载均衡客户端负载均衡 对于传统的分布式服务来说,大多使用服务端负载均衡.一般会使用Nginx或者ELB等工具作为负载均衡器,如下图: 传统负载均衡 而在Spring Cloud中,使用的是「客户端负载均衡」的方式,使用「Ribbon」组件来实现客户端的负载均衡.只要引入了微服务注册中心依赖,就会自动引入Ribbon依赖.客户端负载均衡

  • spring cloud eureka微服务之间的调用详解

    微服务之间的调用如何实现 首先 你需要两个或以上的微服务模块 至于怎么创建可以参考我上一篇博客 spring cloud eureka注册中心 如果想在页面显示 那么需要先加上 compile 'org.springframework.boot:spring-boot-starter-thymeleaf' 这个thymeleaf依赖 springboot推荐使用thymeleaf模板 它的最大好处就是原型即是模板 后缀是html html文件 需要放在resources/templates文件夹

  • spring cloud服务之间的调用之ribbon详解

    前言 昨天,我们通过一个实例演示了,spring-cloud服务注册组件--Eureka的基本配置和简单用法,但是服务注册就是为了方便后期的发现和调用,所以今天我们趁热打铁,分享下spring-cloud服务之间的调用. 服务间的调用 关于spring-cloud的服务调用,我们首先需要了解它的两个核心组件Ribbon和Feign. 我们都知道,spring boot的接口都是基于REST实现的,但是在实际线上运行的时候,考虑到用户规模.服务可用性等方面的因素,我们一般很少是单节点运行的,通常都

  • springcloud config配置读取优先级过程详解

    情景描述 最近在修复Eureka的静态页面加载不出的缺陷时,最终发现是远程GIT仓库将静态资源访问方式配置给禁用了(spring.resources.add-mappings=false).虽然最后直接修改远程GIT仓库的此配置项给解决了(spring.resources.add-mappings=true),但是从中牵涉出的配置读取优先级我们必须好好的再回顾下 springcloud config读取仓库配置 通过config client模块来读取远程的仓库配置,只需要在boostrap.p

随机推荐