0


Spring 中使用Nacos配置管理

添加依赖

<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>${latest.version}</version></dependency>

本文使用的版本为:1.1.1

注:我们在Nacos使用SDK的时候引入了nacos-client依赖,nacos-spring-context默认有nacos-client的依赖,本文示例请勿自己添加Nacos-client依赖,否则后续的示例会有意想不到的错误。

  • 我们Nacos的Java SDK一文中引用的nacos-client版本为2.2.0,nacos-spring-context 1.1.1版本依赖的nacos-client版本为1.4.1所以会有版本差异,会出现方法不存在等错误问题。

Spring使用Nacos的配置模块

packagecom.yyoo.nacos.spring;importcom.alibaba.nacos.api.annotation.NacosProperties;importcom.alibaba.nacos.api.config.ConfigType;importcom.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;importcom.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;importorg.springframework.context.annotation.Configuration;@Configuration@EnableNacosConfig(globalProperties =@NacosProperties(serverAddr ="127.0.0.1:8848"))@NacosPropertySource(dataId ="com.yyoo.nacos.sdk.CofingServiceTest",groupId ="Nacos:Test",autoRefreshed =true,type =ConfigType.JSON)publicclassNacosConfiguration{}
  • @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务
  • globalProperties全局配置,是使用@NacosProperties注解加载的全局配置
  • @NacosProperties 是全局和自定义 Nacos 属性的统一注解。 它充当Java Properties 和 NacosFactory 类之间的中介。
  • @NacosPropertySource其作用与Spring的@PropertySource作用一样,是读取配置到Spring容器中
  • dataId我们在Nacos中的配置id,groupId我们在Nacos中的groupId。
  • autoRefreshed 为true表示,如果配置修改容器将自动更新配置
  • type即我们的配置的类型,这里是Json类型

Nacos中发布的示例配置

在这里插入图片描述

获取配置的示例

packagecom.yyoo.nacos.spring;importcom.alibaba.nacos.api.config.annotation.NacosValue;importorg.springframework.stereotype.Controller;@ControllerpublicclassNacosTestController{@NacosValue(value ="${conf1:default}", autoRefreshed =true)privateString conf1;publicStringgetConf1(){return conf1;}}

我们模拟了一个Controller,获取Nacos中的conf1配置。

  • @NacosValue 的作用相当于Spring中的@Value
packagecom.yyoo.nacos.spring.test;importcom.yyoo.nacos.spring.NacosTestController;importorg.junit.Test;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;publicclassNacosTest{@TestpublicvoidtestSpring(){AnnotationConfigApplicationContext context =newAnnotationConfigApplicationContext();
        context.scan("com.yyoo");
        context.refresh();NacosTestController controller = context.getBean(NacosTestController.class);System.out.println(controller.getConf1());}}

示例代码执行之后,会输出结果:test1

  • 注:本示例需要使用Spring的相关依赖和知识。

示例二

packagecom.yyoo.nacos.spring.bean;importcom.alibaba.nacos.api.annotation.NacosProperties;importcom.alibaba.nacos.api.config.ConfigType;importcom.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;importcom.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;importorg.springframework.context.annotation.Configuration;@Configuration@EnableNacosConfig(globalProperties =@NacosProperties(serverAddr ="127.0.0.1:8848"))@NacosConfigurationProperties(dataId ="com.yyoo.nacos.sdk.CofingServiceTest",groupId ="Nacos:Test",autoRefreshed =true,prefix ="my",type =ConfigType.JSON)publicclassMyPro{privateString conf1;privateString conf2;publicStringgetConf1(){return conf1;}publicvoidsetConf1(String conf1){this.conf1 = conf1;}publicStringgetConf2(){return conf2;}publicvoidsetConf2(String conf2){this.conf2 = conf2;}@OverridepublicStringtoString(){finalStringBuilder sb =newStringBuilder("MyPro{");
        sb.append("conf1='").append(conf1).append('\'');
        sb.append(", conf2='").append(conf2).append('\'');
        sb.append('}');return sb.toString();}}

Nacos界面修改配置
在这里插入图片描述

@TestpublicvoidtestSpring2(){AnnotationConfigApplicationContext context =newAnnotationConfigApplicationContext();
        context.scan("com.yyoo");
        context.refresh();MyPro pro = context.getBean(MyPro.class);System.out.println(pro);}

输出结果:MyPro{conf1=‘test1’, conf2=‘test3’}

Nacos配置注解与Spring的配置注解的对应

SpringNacos说明@Value@NacosValue@ConfigurationProperties@NacosConfigurationProperties对应字段上可以使用@NacosProperty,@NacosIgnore@PropertySource@NacosPropertySource@PropertySources@NacosPropertySources

Nacos的这些注解的主要作用与Spring对应的注解一样

Nacos配置注解说明

全局 Nacos 属性

globalProperties 将初始化为其他注解或组件的 “全局 Nacos 属性”

globalProperties 是任何 @EnableNacos,@EnableNacosDiscovery 或 @EnableNacosConfig 中的必选属性,其类型为 @NacosProperties。示例:@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = “127.0.0.1:8848”))

全局 Nacos 属性 定义全局和默认属性。它设置为具有最低优先级,并且也可以被覆盖。覆盖优先级如下:
优先级配置说明1*.properties()最高优先级2@EnableNacosConfig.globalProperties() 或 @EnableNacosDiscovery.globalProperties()3@EnableNacos.globalProperties()最低优先级
*.properties() 定义来自以下之一的自定义 Nacos 属性:

  • @NacosInjected.properties()
  • @NacosConfigListener.properties()
  • @NacosPropertySource.properties()
  • @NacosConfigurationProperties.properties()

自定义的 Nacos 属性也由 @NacosProperties 配置。 不过,它们是可选的,用于在特殊情况下覆盖全局 Nacos 属性。 如果没有定义,Nacos 属性将尝试从 @EnableNacosConfig.globalProperties() 或 @EnableNacosDiscovery.globalProperties() 或 @EnableNacos.globalProperties() 中查找属性。

配置注解的占位符

占位符直接查看源码就行了,比如查看@NacosProperties的源码

//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//packagecom.alibaba.nacos.api.annotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target({ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceNacosProperties{StringPREFIX="nacos.";StringENDPOINT="endpoint";StringNAMESPACE="namespace";StringACCESS_KEY="access-key";StringSECRET_KEY="secret-key";StringSERVER_ADDR="server-addr";StringCONTEXT_PATH="context-path";StringCLUSTER_NAME="cluster-name";StringENCODE="encode";StringCONFIG_LONG_POLL_TIMEOUT="configLongPollTimeout";StringCONFIG_RETRY_TIME="configRetryTime";StringMAX_RETRY="maxRetry";StringENABLE_REMOTE_SYNC_CONFIG="enableRemoteSyncConfig";StringUSERNAME="username";StringPASSWORD="password";StringENDPOINT_PLACEHOLDER="${nacos.endpoint:}";StringNAMESPACE_PLACEHOLDER="${nacos.namespace:}";StringACCESS_KEY_PLACEHOLDER="${nacos.access-key:}";StringSECRET_KEY_PLACEHOLDER="${nacos.secret-key:}";StringSERVER_ADDR_PLACEHOLDER="${nacos.server-addr:}";StringCONTEXT_PATH_PLACEHOLDER="${nacos.context-path:}";StringCLUSTER_NAME_PLACEHOLDER="${nacos.cluster-name:}";StringENCODE_PLACEHOLDER="${nacos.encode:UTF-8}";StringCONFIG_LONG_POLL_TIMEOUT_PLACEHOLDER="${nacos.configLongPollTimeout:}";StringCONFIG_RETRY_TIME_PLACEHOLDER="${nacos.configRetryTime:}";StringMAX_RETRY_PLACEHOLDER="${nacos.maxRetry:}";StringENABLE_REMOTE_SYNC_CONFIG_PLACEHOLDER="${nacos.enableRemoteSyncConfig:}";StringUSERNAME_PLACEHOLDER="${nacos.username:}";StringPASSWORD_PLACEHOLDER="${nacos.password:}";Stringendpoint()default"${nacos.endpoint:}";Stringnamespace()default"${nacos.namespace:}";StringaccessKey()default"${nacos.access-key:}";StringsecretKey()default"${nacos.secret-key:}";StringserverAddr()default"${nacos.server-addr:}";StringcontextPath()default"${nacos.context-path:}";StringclusterName()default"${nacos.cluster-name:}";Stringencode()default"${nacos.encode:UTF-8}";StringconfigLongPollTimeout()default"${nacos.configLongPollTimeout:}";StringconfigRetryTime()default"${nacos.configRetryTime:}";StringmaxRetry()default"${nacos.maxRetry:}";StringenableRemoteSyncConfig()default"${nacos.enableRemoteSyncConfig:}";Stringusername()default"${nacos.username:}";Stringpassword()default"${nacos.password:}";}

我想不用做过多的解释

标签: spring java Nacos

本文转载自: https://blog.csdn.net/forlinkext/article/details/128399824
版权归原作者 没事儿写两篇 所有, 如有侵权,请联系我们删除。

“Spring 中使用Nacos配置管理”的评论:

还没有评论