Java SDK获取和监听nacos配置信息的方法
作者:eggcode
本文手把手教你解决Nacos配置获取为null的常见问题,提供Java示例代码快速上手配置中心,并演示如何监听配置变化实现自动更新,从新建Maven项目到运行成功,涵盖版本兼容性、端口映射等关键步骤,助你轻松集成Nacos,需要的朋友可以参考下
手动新建配置用于测试

输入一些配置内容:
k1=v1 spring.datasource.username=ken spring.datasource.password=123456
点击发布:

查看,点击【示例代码】,查看Java示例代码:


curl方式访问配置
curl -X GET "http://223.2.35.53:8848/nacos/v1/cs/configs?dataId=test&group=DEFAULT_GROUP"
可以获得前面在nacos中配置的内容。说明服务端的接口没问题。

工程示例:获取nacos配置
新建一个maven工程。
增加nacos客户端依赖
在pom.xml中添加:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>获取配置的Java代码
基于上面的示例代码,只是简化了:
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.PropertyKeyConst;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws Exception {
String serverAddr = "localhost:8848";
String dataId = "test";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 2000);
System.out.println("SDK result: '\n" + content + "'");
}
}直接运行,报错缺少org.slf4j.LoggerFactory。
修改pom.xml引入slf4j
通过增加springboot相关,间接引入日志:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>test-java</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.6.5</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
</project>获取的nacos配置信息为null
方案1
引入的nacos的jar包版本是2.1.1,但是运行上面代码,获取nacos配置信息为null,即的content为null。
解决方法即降低jar包版本为1.4.4。
方案2
docker创建容器时多映射两个端口:
-p 9848:9848 \ # 关键:暴露 gRPC 端口 -p 9849:9849 \ # 关键:暴露 gRPC 服务端端口

这样可以用 Nacos 2.x 的新特性(如配置监听、长连接优势)。
成功获取配置信息
运行java代码,成功获取nacos的配置信息:

工程示例:监听nacos配置的变化
在前面工程的基础上,修改Java代码:
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.listener.Listener;
import java.util.Properties;
import java.util.concurrent.Executor;
public class Main {
public static void main(String[] args) throws Exception {
String serverAddr = "localhost:8848";
String dataId = "test";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 2000);
System.out.println("SDK result: '\n" + content + "'");
//监听配置变化
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String s) {
System.out.println("receiveConfigInfo");
System.out.println(s);
}
});
System.in.read();//避免程序结束
}
}然后修改nacos服务端上的配置信息,重新发布。
客户端监听到配置信息变化后,自动将其打印。
以上就是Java SDK获取和监听nacos配置信息的方法的详细内容,更多关于Java SDK获取监听nacos配置信息的资料请关注脚本之家其它相关文章!
