无法读取public下的配置
因为碰到一个坑,项目中加载远程配置的优先级高于本地配置项,故重新起了一个新的工程和nacos本地环境准备试一把,没想到碰到其他的坑
spring boot使用 2.2.4.RELEASE 版本,nacos使用 2.4.2 版本,nacos-config-spring-boot-starter 工程一直没有更新,最新的2.x版本(即0.2.12)依赖的nacos仍旧是2.1,故对依赖做了排除重新引用,如下
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.12</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.4.2</version>
</dependency>
对 Spring boot的依赖如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.31</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
yaml中使用spring boot的配置方式,如下
nacos:
config:
server-addr: 127.0.0.1:8848
context-path: nacos
namespace: public
group: DEFAULT_GROUP
data-id: COMMON
type: yaml
bootstrap:
enable: true
log-enable: true
问题是死活读不到配置项,检查namespace、group、data-id、type完全没问题,nacos启动无任何报错,代码debug无法获取配置内容,debug位置位于
com.alibaba.nacos.common.remote.client.grpc.GrpcConnection#request最终方法,发送请求无返回内容
public Response request(Request request, long timeouts) throws NacosException {
Payload grpcRequest = GrpcUtils.convert(request);
ListenableFuture<Payload> requestFuture = grpcFutureServiceStub.request(grpcRequest);
Payload grpcResponse;
try {
grpcResponse = requestFuture.get(timeouts, TimeUnit.MILLISECONDS);
} catch (Exception e) {
throw new NacosException(NacosException.SERVER_ERROR, e);
}
return (Response) GrpcUtils.parse(grpcResponse);
}
最终定位到问题是内置的 public 命名空间的命名空间id是空的,也就是在配置里面 namespace 要留空不写,🙂↔️