专栏首页行者常至SpringBoot 中 @ConfigurationProperties 配置后 apollo 自动刷新

SpringBoot 中 @ConfigurationProperties 配置后 apollo 自动刷新

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qwdafedv/article/details/103117320

1、在配置文件(如:application.properties)中,开启Apollo的自动更新

spring.boot.enableautoconfiguration=true

2.实现ApplicationContextAware

package com.qbz.test.commons.web.config;


import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.cloud.context.scope.refresh.RefreshScope;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * apollo 自动刷新
 *
 * @author qubianzhong
 * @Date 20:32 2019/11/11
 */
@Component
@Slf4j
public class ApolloRefreshConfig implements ApplicationContextAware {

    ApplicationContext applicationContext;

    @Autowired
    RefreshScope refreshScope;

	//这里指定Apollo的namespace,非常重要,如果不指定,默认只使用application
    @ApolloConfigChangeListener(value = {ConfigConsts.NAMESPACE_APPLICATION,"business","everything"})
    public void onChange(ConfigChangeEvent changeEvent) {
        for (String changedKey : changeEvent.changedKeys()) {
            log.info("apollo changed namespace:{} Key:{} value:{}", changeEvent.getNamespace(), changedKey, changeEvent.getChange(changedKey));
        }
        refreshProperties(changeEvent);
    }

    public void refreshProperties(ConfigChangeEvent changeEvent) {
        this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
        refreshScope.refreshAll();
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • aop-aspectJ的通知不被执行

    qubianzhong
  • 继承的父类的request属性为啥 用不了?

    qubianzhong
  • SpringBoot 单元测试

    qubianzhong
  • SpringBoot集成RabbitMQ-三种模式的实现

    1、启动消费者的SRApplication.java 2、启动生产者的Test.java中的测试方法

    TrueDei
  • [SpingBoot guides系列翻译]Redis的消息订阅发布

    这节讲的是用Redis来实现消息的发布和订阅,这里会使用Spring Data Redis来完成。

    _淡定_
  • Spring security笔记4/4: 自定义成功和失败

    重命名 Case3Application.java 为 Case4Application.java

    tonglei0429
  • SpringMvc源码之解析参数HandlerMethodArgumentResolver

    HandlerMethodArgumentResolver是什么?它是springmvc提供的入参解析器,像平常应用的注解@RequestParam @Path...

    奕仁
  • SpringSecurity权限管理,根据请求URL鉴权

    SpringSecurity和Shiro是两大权限框架,前者属于Spring家族,功能比较强,重量级的存在,新手搞的时候可能会经常遇到坑。后者比较轻量级,上手相...

    Java帮帮
  • SpringBoot集成Redis缓存

    https://www.cnblogs.com/noneplus/p/11532065.html

    Noneplus
  • SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景

    拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 拦截器主要用来按照指定规则拒绝请求。

    知了一笑

扫码关注云+社区

领取腾讯云代金券