spring cloud 自定义配置源及配置刷新
2019独角兽企业重金招聘Python工程师标准>>>
通过自定义配置源可以接入自己的配置服务,配合ContextRefresher可以让应用运行中自动更新配置。
实现PropertySourceLocator
/*** 自定义配置源*/
public class MyPropertySourceLocator implements PropertySourceLocator {@Overridepublic PropertySource<?> locate(Environment environment) {String msg = new SimpleDateFormat("HH:mm:ss").format(new Date());Map<String, Object> map = new HashMap<>();map.put("demo.diy.msg", msg);System.err.println("MyPropertySourceLocator, demo.diy.msg = " + msg);//spring自带的一个简单的map结构配置集合,也可以继承PropertySource自定义MapPropertySource source = new MapPropertySource("my-source", map);return source;}
}
配置类
@Configuration
public class MyConfigBootstrapConfiguration {@Beanpublic MyPropertySourceLocator myPropertySourceLocator() {return new MyPropertySourceLocator();}}
用Java代码声明bean,还需要在resources/META-INF/spring.factories中声明
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.netease.ag.demoweb.MyConfigBootstrapConfiguration
Spring中类似与Java SPI的加载机制。它在META-INF/spring.factories文件中配置接口的实现类名称,然后在程序中读取这些配置文件并实例化。这种自定义的SPI机制是Spring Boot Starter实现的基础。
使用自定义配置
@RefreshScope //可更新
@Component
@Data
public class ValueConfig {@Value("${demo.copy.msg}")private String copyMsg;@Value("${demo.diy.msg}")private String diyMsg;public ValueConfig() {System.err.println("ValueConfig init");}
}
application.properties中可以引用自定义配置
demo.copy.msg=${demo.diy.msg}
springboot应用启动
@SpringBootApplication
@RestController
public class DemowebApplication {@Resourceprivate ValueConfig valueConfig;@Resourceprivate ContextRefresher contextRefresher;public DemowebApplication() {System.err.println("DemowebApplication init");}public static void main(String[] args) {SpringApplication.run(DemowebApplication.class, args);}@RequestMapping("/t")public String t() {return valueConfig.toString();}//更新bean属性@RequestMapping("/r")public Object r() {return contextRefresher.refresh();}
启动日志
. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v1.5.2.RELEASE)MyPropertySourceLocator, demo.diy.msg = 17:18:22
...
DemowebApplication init
...
ValueConfig init
...Tomcat started on port(s): 8080 (http)
查询,多次请求返回一致
请求:http://localhost:8080/t 响应:ValueConfig(copyMsg=17:18:22, diyMsg=17:18:22)
更新
请求:http://localhost:8080/r 响应:["demo.diy.msg"]
日志输出:
MyPropertySourceLocator, demo.diy.msg = 17:27:44
再次调用查询接口,发现值改变,并且输出日志
ValueConfig init
证明更新字段实际是重新生成了一个bean
转载于:https://my.oschina.net/liujiest/blog/2254176
spring cloud 自定义配置源及配置刷新相关推荐
- Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心)
文章目录 Spring Boot配置 简单测试使用 Spring Cloud自定义配置文件获取 1. 引入依赖 2. 自定义配置 2.1 自定义PropertySource,这里我们直接使用Sprin ...
- k8s springboot 文件_Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程...
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...
- Spring Cloud第六章:配置中心Config
在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管 ...
- java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...
- Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...
- Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
文章目录 需求 实现 Step 1 Nacos Config 新增公共配置 Step 2 验证 配置文件优先级 源码 需求 举个例子,同一个微服务,通常我们的servlet-context 都是相同的 ...
- .Net Core 自定义配置源从配置中心读取配置
配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...
- Spring Cloud整合Nacos实现动态配置
前提 已经安装并启动了nacos-server服务端. 整合 创建一个maven工程并引入以下依赖: <dependency><groupId>org.springframew ...
- nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心
什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...
- Spring Cloud Stream多RabbitMQ实例配置时报错no default binder has been set
当前Spring Cloud Rabbit的版本为2.1.2 <dependency><groupId>org.springframework.cloud</groupI ...
最新文章
- 分离颜色通道(split)和多通道融合(merge)
- css中使用id和class 的不同
- login控件设置居中
- php表达式生成工具,thinkPHP5.0数据查询表达式生成技巧
- 点击按钮,图片和按钮的文字发生改变
- 【汇编语言】状态标志符(CF/OF/SF/ZF)在运算(ADD/SUB/ADC/SBB)过程中的响应变化
- 在Linux中创建静态库.a和动态库.so
- arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...
- php获取周几,php怎么获得星期几
- 《荒漠甘泉》4月21日
- python程序画漂亮图_用python画图代码:正弦图像、多轴图等案例
- 计算机组成原理——第八章
- 光子能变成正负电子,能不能变成其他正反物质?
- RTX与其他实时操作系统的比较
- Win 10 1月 12 日 停用 flash解决办法
- PMP知识点总结-自由时差与总时差
- 20145222何志威《网络对抗》- Web安全基础实践
- 揭密出席第九届中国云计算大会的专家—近20个国家学者共话云计算大数据生态、应用...
- 数据分析--模型建立和评估
- R语言绘制棒棒糖图(火柴杆图)