通过代码方式从Nacos配置中心获取多层级值并自动刷新

需求:需要从nacos中获取多层级值,因为我的逻辑里需要将接口接收到的参数用来判断在nacos上存不存在,所以这个不能靠@Value("${param}")来实现,因为此注解只能获取到具体某一层的值,而不能笼统的拿到二层三层下的所有key/value,所以通过代码形式来拿,记录一下,下次有此需求可以直接复制。

我的nacos需要获取的配置,我的第三层有四个值(2006_system1.....),我需要统一获取用来逻辑判断。

 首先先自定义一个config类:

prefix="facecode"意思是我要获取facecode层级下的所有配置,你们换成自己的名称(注意这个名称在配置里不能使用驼峰命名,否则在这里会获取不到报错)。

systemMap对象是我要用来获取第四层级的值,因为我的每个三级都有好几层四级。

@RefreshScope加上此注解可以实现自动刷新。
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@Data
@RefreshScope
@ConfigurationProperties(prefix = "facecode")
public class CommonMqMsgConfig {

    private Map<String,SystemMap> systemMap;

    @Data
    public static class SystemMap{
        private String exchange_name;
        private String queue_name;
        private String routing_key;
    }
}

然后在逻辑层直接将类注入进来获取配置拿到值来做相应的处理即可:

SpringBoot中,要从Nacos配置中心获取,可以使用阿里巴巴的nacos-spring-boot-starter组件来实现。首先,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>nacos-config</artifactId> </dependency> ``` 然后,在需要获取配置的静态方法中,可以使用以下代码获取Nacos配置中心中的: ```java import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; @Component @RefreshScope public class MyUtil { @Autowired private ConfigService configService; public static String getConfig(String dataId, String group, long timeout) throws NacosException { return SpringContextUtil.getBean(ConfigService.class).getConfig(dataId, group, timeout); } } ``` 在上面的代码中,我们通过@Autowired注解注入了ConfigService,然后在静态方法中通过SpringContextUtil.getBean(ConfigService.class)获取ConfigService实例,然后调用getConfig方法获取配置。同时,我们在MyUtil类上使用了@RefreshScope注解,表示当Nacos配置中心的配置发生变化时,该类的Bean也会随之刷新。 需要注意的是,使用@RefreshScope注解需要在SpringBoot的配置文件中添加以下配置: ```yaml spring: cloud: nacos: config: refreshable-dataids: your-data-id ``` 其中your-data-id为你需要动态刷新的配置项的dataId。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值