码云代码地址
https://gitee.com/zjj19941/ZJJ_Neaten5.10/tree/master/ZJJ_Nacos/nacos-config-demo
入门代码编写
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>
properties配置
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 这个默认值 ,这是为了高可用性.
nacos-server配置
右上角 点击 加号 添加一条配置信息
配置内容: info: hello,你好
点击发布
再次postman访问,发现能获取到你刚配置的值了.
你修改完了新的值之后,再次访问接口也能给你返回新的值,原因是 @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还是读到删除之前的值》