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 自定义配置源及配置刷新相关推荐

  1. Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心)

    文章目录 Spring Boot配置 简单测试使用 Spring Cloud自定义配置文件获取 1. 引入依赖 2. 自定义配置 2.1 自定义PropertySource,这里我们直接使用Sprin ...

  2. k8s springboot 文件_Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程...

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...

  3. Spring Cloud第六章:配置中心Config

    在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管 ...

  4. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用

    Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...

  5. Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式

    文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...

  6. Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置

    文章目录 需求 实现 Step 1 Nacos Config 新增公共配置 Step 2 验证 配置文件优先级 源码 需求 举个例子,同一个微服务,通常我们的servlet-context 都是相同的 ...

  7. .Net Core 自定义配置源从配置中心读取配置

    配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...

  8. Spring Cloud整合Nacos实现动态配置

    前提 已经安装并启动了nacos-server服务端. 整合 创建一个maven工程并引入以下依赖: <dependency><groupId>org.springframew ...

  9. nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心

    什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...

  10. Spring Cloud Stream多RabbitMQ实例配置时报错no default binder has been set

    当前Spring Cloud Rabbit的版本为2.1.2 <dependency><groupId>org.springframework.cloud</groupI ...

最新文章

  1. 分离颜色通道(split)和多通道融合(merge)
  2. css中使用id和class 的不同
  3. login控件设置居中
  4. php表达式生成工具,thinkPHP5.0数据查询表达式生成技巧
  5. 点击按钮,图片和按钮的文字发生改变
  6. 【汇编语言】状态标志符(CF/OF/SF/ZF)在运算(ADD/SUB/ADC/SBB)过程中的响应变化
  7. 在Linux中创建静态库.a和动态库.so
  8. arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...
  9. php获取周几,php怎么获得星期几
  10. 《荒漠甘泉》4月21日
  11. python程序画漂亮图_用python画图代码:正弦图像、多轴图等案例
  12. 计算机组成原理——第八章
  13. 光子能变成正负电子,能不能变成其他正反物质?
  14. RTX与其他实时操作系统的比较
  15. Win 10 1月 12 日 停用 flash解决办法
  16. PMP知识点总结-自由时差与总时差
  17. 20145222何志威《网络对抗》- Web安全基础实践
  18. 揭密出席第九届中国云计算大会的专家—近20个国家学者共话云计算大数据生态、应用...
  19. 数据分析--模型建立和评估
  20. R语言绘制棒棒糖图(火柴杆图)

热门文章

  1. codevs 1082 线段树区间求和
  2. WSDL中文版——详解
  3. 使用JQuery从客户端调用C#方法
  4. C#实现MVC模式简要方法(2)
  5. 云计算技术都要学什么?教你分清公有云、私有云和混合云
  6. win7下安装docker
  7. 《云计算:原理与范式》一3.9 SaaS集成服务
  8. Java Date Time 教程-java.sql.Timestamp
  9. listview上拉隐藏标题与下拉显示标题
  10. Swift和OC文件间的相互调用