在运行时在Spring Cloud Config中刷新属性配置

在本系列Spring Cloud Config的教程系列中,我们将讨论在运行时刷新属性配置的过程,我们将使用Spring Boot致动器/refresh端点进行/refresh 。 此外,我们还将研究使用@RefreshScope注释刷新@Value属性。

在我的Spring Cloud Config的上一教程中 ,我们使用发现服务器和发现客户端建立了一个云配置服务,并成功创建了一个示例,以在具有GIT支持的存储的分布式环境中读取应用程序配置属性。在这里,我们将继续进行演示运行时在Spring Cloud Config中刷新属性配置的功能。

在本文中,我们将只专注于刷新配置属性。 因此,我们将不会使用与发现服务器相关的配置。 我们将有一个配置服务器,用于从GIT存储库和带有执行器项目的配置客户端中加载属性。

刷新属性的不同方法

刷新配置属性的一种简单方法是使用spring boot促动器提供的/refresh端点,但这是一个手动过程,需要针对所有实例进行触发。另一种方法是/bus/refresh与spring-cloud-bus和在这种情况下,所有实例都订阅一个事件,并且一旦触发该事件,所有配置属性都将通过Spring Cloud Bus广播自动刷新。刷新这些属性的第三种方法是通过连接VCS。 在本文中,我们将讨论弹簧启动执行器的刷新端点。

Spring Cloud Config Server实施

在上一篇文章中,我们已经为该实现做好了准备。 在这里,让我们简要地讨论一下。 我们在配置服务器和Spring Boot主应用程序中定义了以下application.properties,它将REST端点公开为http:// localhost:8888,以供客户端获取配置属性。

application.properties

server.port=8888
spring.cloud.config.server.git.uri=https://github.com/only2dhir/config-repo.git

SpringCloudConfigExampleApplication.java

package com.devglan.springcloudconfigexample;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfigExampleApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudConfigExampleApplication.class, args);}
}

我们在https://github.com/only2dhir/config-repo.git上定义了外部配置属性。在这里,我们为活动配置文件的本地和全局属性定义了属性。

Spring Cloud Config客户端实施

对于客户,我们有以下bootstrap.properties defined.This是我们在以前的应用程序定义的相同文件在这里

bootstrap.properties

spring.application.name=spring-cloud-config-client
spring.profiles.active=local
#spring.cloud.config.uri=http://localhost:8888

使用/ refresh端点刷新配置属性

/refresh端点仅刷新使用@ConfigurationProperties注释的那些属性,这意味着它不刷新在应用程序初始化期间初始化的那些属性。 例如,我们定义了以下配置类,该类读取具有随机前缀的属性

package com.devglan.springcloudconfigclient;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix="random")
public class PropertyConfiguration {private String property;public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}
}

我们有以下控制器类,该类使用以random为前缀的属性,并且还读取以@Value注释的属性

@RestController
public class DemoController {@Value("${test.property}")private String testProperty;@Value("${test.local.property}")private String localTestProperty;@Autowiredprivate PropertyConfiguration propertyConfiguration;@RequestMapping("/")public String test() {StringBuilder builder = new StringBuilder();builder.append("global property - ").append(testProperty).append(" || ").append("local property - ").append(localTestProperty).append(" || ").append("property configuration value - ").append(propertyConfiguration.getProperty());return builder.toString();}
}

对于端点http:// localhost:8080 / spring-cloud-config-client /,将输出以下内容。

现在让我们更改定义的配置根据企业的性质spring-cloud-config-client-local.properties如下。

test.local.property=test local property changed
random.property=random property changed

现在,我们将调用执行器的http:// localhost:8080 / spring-cloud-config-client / refresh POST方法来刷新属性。 以下是具有更新属性的响应。

现在,如果我们点击http:// localhost:8080 / spring-cloud-config-client /,我们可以看到来自带有@ConfigurationProperties注释的类的属性已经更新,但是带有@Value注释的属性尚未更新,因为这是初始化的在应用程序启动期间

要更新使用@Value注释的属性,我们需要使用@RefreshScope注释该类。 因此,这里我们将使用@RefreshScope注释控制器类并重新启动客户端应用程序。再次重新启动后,我们将在属性文件中进行更改并将更改推送到git。 这次,我们两次向属性值附加了字符串,然后再次调用了刷新端点。 现在,如果我们访问URL http:// localhost:8080 / spring-cloud-config-client /,我们可以发现用@Value和@ConfigurationProperties注释的配置属性都已更新。

翻译自: https://www.javacodegeeks.com/2018/03/refresh-property-config-at-runtime-in-spring-cloud-config.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonnumpy教程_Python学习教程:通俗易懂的Numpy入门教程

Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pandas也是基于numpy构建的,机器学习包scikit-learn也大量使用了numpy方法。本文介绍了Numpy的n维数组在数据处理和分析的所有核心应用。目录如何构建numpy数组如何观察数…

break和continue关键字

break语句用于终止某个语句块的执行,用在循环中表示跳出循环。 continue只能使用在循环结构中,用于跳过其所在循环当次执行,进入下一次循环执行。 二者功能类似,但continue是终止本次循环,break是终止本层循环。 brea…

认识定制:JSON绑定概述系列

让我们看看自定义JSON绑定序列化和反序列化过程时 , 注释模型和运行时配置如何工作。 本系列的下一篇文章介绍JSON-B如何处理自定义对象的创建。 注解方法 使用注释方法,可以通过注释字段,JavaBean方法和类来定制默认的序列化和反序列化行为…

Java数组(1)--数组概述

数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。 ①数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。…

css hack技巧_5种减少Hack的编码技巧

css hack技巧在本文中,我们将探讨五种方法,这些方法可以使用有效的编码来帮助垃圾回收器花费更少的CPU时间分配和释放内存,并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时停止(也称为“停止世界”)。 一些…

mysql数据库全备_MySQL innobackupex全备是指什么

MySQL innobackupex全备是指什么发布时间:2020-06-03 10:10:31来源:51CTO阅读:133作者:三月下文主要给大家带来MySQL innobackupex全备是指什么,希望这些内容能够带给大家实际用处,这也是我编辑MySQL innob…

数组初始化使用(写)new与不使用(不写)new

首先,数组初始化时,写不写new没有区别的。int arr[] new int[]{ 3, 9, 8};或者int[] arr {3,9,8};编译器遇到 int a[] {3, 8, 9}; 会编译成和 int a[] new int[] {3, 8, 9}; 完全一样的中间代码。 ①不同于String类。String由于实现了常量池&#xf…

如何更改Spring Boot应用程序的默认端口

默认情况下,Spring Boot应用程序通过端口8080在嵌入式Tomcat上运行。为了更改默认端口,您只需要修改server.port属性,该属性将在运行时由Spring Boot应用程序自动读取。 在本教程中,我们提供了修改server.port属性的常用方法。 …

Java数组(2)--一维数组

一、一维数组的(声明赋值)初始化 声明:type var[]; 或 type[] var;(示例:int[] age;) 初始化: ①动态初始化:声明且为数组元素分配空间,与赋值的操作分开进行 int[] ar…

python函数理解_Python 知识理解---函数

函数就如小程序,是组织好的,可以重复使用的,用来实现某一功能的代码.例:print(),input(),len()...等。一般来说函数都带个括号(),在括号里放的是参数,参数指向的是函数要处理的数据。print(python),括号里面的是print(…

JSON合并补丁:JSON-P 1.1概述系列

Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步。 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC 7396 我将在这个迷你系列中涵盖这些主题。 入门 要开始使用JSON-P,您将需要Maven中央存储…

Java数组(3)--二维(多维)数组

二维数组相当于一维数组的元素是一维数组 一、二维数组声明赋值初始化 动态初始化① int[][] arr new int[3][2];定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为…

workflow java_workflow java实现的activity工作流实例 Develop 238万源代码下载- www.pudn.com...

文件名称: workflow下载收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 134 KB上传时间: 2014-09-18下载次数: 3提 供 者: 张华详细说明:java实现的activity工作流实例 -java activity文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉)…

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序SSO。 3个帖子是: 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring …

实现任意行数的杨辉三角

public class JavaTest {public static void main(String[] args) {//放置杨辉三角的数组&#xff0c;可通过更改new int[n][]中n的值以获取不同行数的杨辉三角int[][] yangItem new int[10][];//获取杨辉三角数组中每个元素的值for (int i 0;i < yangItem.length;i){//当…

java excel sheet页_Java导出Excel Sheet页

1、问题背景导出Excel表格时&#xff0c;首先要生成Sheet页&#xff0c;下面将介绍如何生成Sheet页2、实现源码/**** Project:* Title:ExcelExport.java* Package:report.utils* Description:* Author:YouHaiDong* Date:2015年11月2日 下午6:29:22* Version:*/package report.u…

鸿蒙与安卓系统简单对比,绝非追求三分天下。

鸿蒙是面向5G物联网、面向全场景的分布式操作系统&#xff0c;其不是安卓系统的分支或修改而来的&#xff0c;与安卓、iOS是不一样的操作系统。鸿蒙将打通手机、电脑、平板、电视、电器设备、工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统&#xff0c;并且…

java 防止用户重复登录_JAVA 如何避免用户的重复登录

展开全部读懂下面代码&#xff0c;就知道如何实现 一个用户登陆 踢掉之前登陆的用户了//第一步// 此监听62616964757a686964616fe4b893e5b19e31333337626166器用来监听用户在对session做操作的时候执行相应的方法import javax.servlet.http.HttpSession;import javax.servlet.h…

rust语法丑陋_抛出异常–缓慢而丑陋

rust语法丑陋这篇文章是关于历史经验以及最近应用的性能优化技术的。 几年前&#xff0c;我在特定的应用程序中发誓&#xff0c;我不得不发现隐藏在真正聪明的工程“技术”之下的无证行为。 它是负责开票的典型的整体式Java EE应用程序。 最好忘记确切的代码&#xff0c;但是我…

(0.1)鸿蒙HarmonyOS开发工具DevEco Studio设置

1、打开设置操作框 2.1主题设置&#xff08;可以工具自己的喜好设置主题&#xff09; 2.2设置字体 2.3设置注释 2.4设置提示语句忽略大小写&#xff08;输入小写时&#xff0c;提示语句也会出现大写的关键字等&#xff09; 2.5设置自动导包&#xff08;不用导包&#xff0c;工具…