码云代码地址

https://gitee.com/zjj19941/ZJJ_Neaten5.10/tree/master/ZJJ_Nacos/nacos-config-demo

入门代码编写

  1. <dependency>
  2. <groupId>com.alibaba.boot</groupId>
  3. <artifactId>nacos-config-spring-boot-starter</artifactId>
  4. <version>0.2.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba.nacos</groupId>
  8. <artifactId>nacos-client</artifactId>
  9. <version>1.1.1</version>
  10. </dependency>

properties配置

  1. nacos.config.server-addr=zjj101:8848

Java代码

import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 读取nacos配置文件
 * autoRefreshed = true 是自动刷新的意思
 */
@NacosPropertySource(dataId = "example",groupId = "DEFAULT_GROUP",autoRefreshed = true)
@RestController
public class NacosConfigController {

    /**
     * 当前的info这个属性,会去nacos-server找到对应的info这个属性
     * 如果Nacos出现异常了,无法连到远端的Nacos的配置信息,那么为了防止空指针异常
     * 就会使用hello Nacos 这个默认值  ,这是为了高可用性
     */
    //localhost:8080/get
    @NacosValue(value = "${info:hello Nacos}",autoRefreshed = true)
    private String info;

    @GetMapping("/get")
    public String get(){
        return info;
    }



}

启动项目之后postman 访问 localhost:8080/get, 结果是 hello Nacos .

原因是咱们并没有配置nacos值, @NacosValue(value = “${info:hello Nacos}”,autoRefreshed = true) 中的value值 ,冒号后面的意思是 如果在nacos-server没有取到 info对应的值,默认就是hello Nacos, 这样做的目的是 如果Nacos出现异常了,无法连到远端的Nacos的配置信息,那么为了防止空指针异常, 就会使用hello Nacos 这个默认值 ,这是为了高可用性.
image.png

nacos-server配置


右上角 点击 加号 添加一条配置信息

image.png

image.png
配置内容: info: hello,你好

点击发布

再次postman访问,发现能获取到你刚配置的值了.
image.png

你修改完了新的值之后,再次访问接口也能给你返回新的值,原因是 @NacosValue(value = “${info:hello Nacos}”,autoRefreshed = true)中 autoRefreshed设置了true ,自动刷新了

删除数据之后

你再次访问localhost:8080/get 发现还能获取到删除之前的值,原因是:删除nacos上的配置后,客户端其实读取到的是客户端内存中的配置,nacos将删除的kv变更没有同步到到客户端。所以感官上看到客户端依旧读的是“老的配置”;

如果你想解决这个问题的话,就是想nacos-server删除掉值之后, Java代码能感知到nacos-server删除了这个值了,这个值已经没了,那么就看这个帖子,自行解决 : https://www.yuque.com/docs/share/6c693656-a796-465b-8fb0-77c1316a21d0?# 《Nacos删除配置后,sprintboot还是读到删除之前的值》