最近在使用SpringCloudAlibaba整合nacos时出现一个情况,java服务能够正常注册到nacos,但是java服务却无法读取到nacos上创建的配置信息,检查java项目中的配置文件未发现问题,pom.xml中的依赖似乎也没问题,根据百度上的解决方案,尝试过将java中的配置文件名称由application改为bootstrap,也试过将.properties改为.yml,都无济于事,最后经过多次尝试后发现,其实是依赖版本不兼容,现将正确依赖展示如下:
父项目依赖管理:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<!-- Spring Cloud Alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Boot Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud家族 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
需要注意的点是:spring-cloud.version、spring-cloud-alibaba.version和spring-boot.version这三个版本号,我的java项目之前之所以读取不到nacos上的配置就是因为这三个依赖的版本不兼容,在网站"https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E"了解后发现,我使用的2.6.13版本的SpringBoot要搭配2021.0.5.0版本的SpringCloudAlibaba和2021.0.5版本的SpringCloud去使用。
依赖版本正确之后,将子项目的配置文件名修改为bootstrap,格式可以是properties或者yml(自行选择),但是由于SpringCloudAlibaba在2020版本后就不再支持bootstrap,所以需要自行导入bootstrap依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
我的子项目依赖如下:
<dependencies>
<!--web实例-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--在线api文档-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<!-- nacos注册中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
配置文件bootstrap.properties:
spring.profiles.active = dev
配置文件bootstrap-dev.properties:
spring.application.name=nacos-user
nacos-server-addr=127.0.0.1:8848
nacos-namespace=756f7da3-f8b5-4141-abd2-c6ba02ea63ca
spring.cloud.nacos.discovery.server-addr=${nacos-server-addr}
spring.cloud.nacos.discovery.enabled=true
spring.main.allow-bean-definition-overriding=true
spring.cloud.nacos.discovery.namespace=${nacos-namespace}
spring.cloud.nacos.config.server-addr=${nacos-server-addr}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.namespace=${nacos-namespace}
logging.level.com.alibaba.nacos.client.config.impl.ClientWorker=debug
logging.level.com.alibaba.nacos.client.naming=debug
使用以上依赖及配置可成功将java服务注册到nacos,并且读取nacos上的配置,最后需要注意的一点是nacos上配置文件的命名(命名格式不正确也可能导致读取不到nacos上的配置),nacos配置文件命名规则请自行百度。