SpringCloud 动态更新Nacos配置

尝试了@RefreshScope无效(spring.cloud.nacos.config.refreshable-dataids未配置的dataid),依赖外部的jar包,版本信息:

<spring-cloud.version>Finchley.SR4</spring-cloud.version>
<nacos.version>0.2.2.RELEASE</nacos.version>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${nacos.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${nacos.version}</version>
</dependency>

package com.yile.app.config;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.client.config.listener.impl.PropertiesListener;
import humanize.time.PrettyTimeFormat;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Locale;
import java.util.Properties;

/**
 * @author zcf
 * @date 2019/10/10
 * @description 配置
 */
@Component
public class NacosConfig implements InitializingBean {

    public static final PrettyTimeFormat ChPrettyTimeFormat = new PrettyTimeFormat();

    //region 接口
    static final String DEFAULT_APPKEY = "demo";
    static final String DEFAULT_APPSECRET = "123456";
    /**
     * AppKey
     */
    public static String yileApiAppKey = "demo";

    /**
     * AppSecret
     */
    public static String yileApiAppSecret = "123456";

    public static final String ZCYAPI_GATEWAY = "http://api.yile.cn";

    private static final String DEFAULT_GROUP = "DEFAULT_GROUP";

    @Value("${spring.application.name}")
    private String appName;

    @Value("${spring.profiles.active:dev}")
    private String profile;

    @Value("${spring.cloud.nacos.config.file-extension:properties}")
    private String extension;

    @Value("${spring.cloud.nacos.config.server-addr}")
    private String serverAddr;

    @Autowired
    NacosConfigProperties nacosConfigProperties;

    /**
     * AppKey配置
     * @param key AppKey
     */
    @Value("${yile.api.appkey:}")
    public void setYileApiAppKey(String key)
    {
        if(StringUtils.isNotEmpty(key)) {
            yileApiAppKey = key;
        }
    }

    /**
     * AppSecret配置
     * @param secret AppSecret
     */
    @Value("${yile.api.appsecret:}")
    public void setYileApiAppSecret(String secret)
    {
        if(StringUtils.isNotEmpty(secret)) {
            yileApiAppSecret = secret;
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        ConfigService configService = NacosFactory.createConfigService(serverAddr);
        configService.addListener(String.format("%s-%s.%s",appName,profile,extension),
                DEFAULT_GROUP,
                new PropertiesListener() {
                    @Override
                    public void innerReceive(Properties properties) {
                        String str = properties.getProperty("yile.api.appkey");
                        if(StringUtils.isNotBlank(str))
                        {
                            setYileApiAppKey(str);
                        }
                        else
                        {
                            setYileApiAppKey(DEFAULT_APPKEY);
                        }

                        str = properties.getProperty("yile.api.appsecret");
                        if(StringUtils.isNotBlank(str))
                        {
                            setYileApiAppSecret(str);
                        }
                        else
                        {
                            setYileApiAppSecret(DEFAULT_APPSECRET);
                        }
                    }
                });
    }
    //endregion


}

bootstrap.yml

yile:
  name: app-service
  nacos:
    server-addr: 192.168.1.109:8848

spring:
  #  zipkin:
  #    base-url: http://localhost:9411
  application:
    name: ${yile.name}
  cloud:
    nacos:
      config:
        server-addr: ${yile.nacos.server-addr}
        shared-dataids: common.properties
        refreshable-dataids: common.properties
    discovery:
      server-addr: ${yile.nacos.server-addr}

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*/*.xml,classpath*:mybatis/mapper/*.xml

其中:nacosConfigProperties(不为空)读取的是spring.cloud.nacos.config.shared-dataids设置的Data-Id

测试:

@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public Object test()
{
    return NacosConfig.yileApiAppKey;
}

测试通过;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值