自学内容网 自学内容网

springboot nacos的各种注解、手动操作监听配置变化(监听指定DataId/监听任何变化)

springboot nacos监听配置变化(监听指定DataId/监听任何变化)

监听任何配置变化

由于我写的这个是基础包-权限中需要监听某些配置,给路径白名单,方便发布后出问题能及时修复权限拦截问题,但是操作nacos时是操作项目所在nacos配置,因此无法在使用指定DataId这种方式去监听变化并实现加白逻辑,需要监听任何配置文件变化。
为方便大家拷贝代码,文章里多加了@Component,基础包采用@EnableXXX模式。

在这里插入图片描述

@Slf4j
@Component
public class AuthNacosConfigListener implements ApplicationListener<EnvironmentChangeEvent> {

    private final AuthConfigProperties authConfigProperties;

    public AuthNacosConfigListener(AuthConfigProperties authConfigProperties) {
        this.authConfigProperties = authConfigProperties;
    }

    /**
     * Handle an application event.
     *
     * @param event the event to respond to
     */
    @Override
    public void onApplicationEvent(EnvironmentChangeEvent event) {
        log.info("监听到权限配置变更事件,刷新权限配置,当前配置为:{},系统变化事件:{}", JSONObject.toJSONString(authConfigProperties), JSONObject.toJSONString(event));
    }
}

有@ConfigurationProperties不需要加@RefreshScope也会自动刷新配置的
ConfigurationProperties是spring-context提供的注解,实现配置注入
RefreshScope是springcloud-context提供的注解,实现自动刷新

在这里插入图片描述

在nacos进行配置修改后

2024-07-18 13:59:43.321  INFO [] 28932 --- [71.85.126_30018] c.s.r.c.a.l.AuthNacosConfigListener      : 监听到权限配置变更事件,刷新权限配置,当前配置为:{"excludePaths":["/abc"]},系统变化事件:{"keys":["common-auth.excludePaths[0]"],"timestamp":1721282383128}

Nacos注解

nacos所有注解
在这里插入图片描述

@NacosConfigurationProperties

这个注解是用在类上的,标明该类要注入nacos里的配置
在这里插入图片描述

@Data
@Configuration
@NacosConfigurationProperties(dataId = "xxx.yml", groupId = "XXX_GROUP", type = ConfigType.YAML, autoRefreshed = true)
public class AuthConfigProperties {
    /**
     * 排除的路径
     */
    private List<String> excludePaths;
}


@NacosValue

nacos提供的注解,用于注入一个配置值,使用表达式定位。
@Value是spring提供的注解,注入值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Data
@Configuration
public class AuthConfigProperties {
    /**
     * 排除的路径
     */
    @NacosValue(value = "#{common-auth.excludePaths}", autoRefreshed = true)
    private List<String> excludePaths;
}

@NacosConfigListener

这个是用来监听某个dataId的配置发生变化的,发生变化时执行方法,并把最新值作为参数传入。

@NacosConfigListener(dataId = "xxx.yml", groupId = "XXX_GROUP", type = ConfigType.YAML)
    public void onChange(String content) {
        System.out.println("receive config change event, content:" + content);
    }

@NacosInjected

NacosConfigService

NacosNamingService

用于注入nacos的服务、注册中心服务

@NacosInjected
    private NacosConfigService nacosConfigService;
    @NacosInjected
    private NacosNamingService nacosNamingService;

nacosConfigService获取操作配置、注册移除监听器等操作
在这里插入图片描述
nacosNamingService 服务注册中心的操作
在这里插入图片描述


原文地址:https://blog.csdn.net/HumorChen99/article/details/140521694

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!