记-SpringCloudAlibaba整合nacos读取不到nacos配置文件

        最近在使用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.versionspring-cloud-alibaba.versionspring-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配置文件命名规则请自行百度。

### Spring Cloud Alibaba 整合 Nacos 示例教程 #### 导入依赖 为了使应用程序能够利用Nacos的功能,仅需引入`Spring Cloud Alibaba Nacos`的相关依赖即可完成集成操作[^1]。对于Maven构建工具而言,在项目的`pom.xml`文件内添加如下片段: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` #### 配置文件设置 在应用的 `/src/main/resources/bootstrap.properties` 或 `application.yml` 文件中指定必要的连接参数来初始化与Nacos服务器之间的通信通道[^2]。 ```properties # bootstrap.properties example spring.application.name=spring-cloud-alibaba-nacos-demo spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 ``` 或者采用YAML格式配置相同的信息: ```yaml # application.yml example server: port: ${PORT:8080} spring: application: name: spring-cloud-alibaba-nacos-demo cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 ``` #### 实现服务发现功能 通过定义接口并标注相应的注解实现自动注册到Nacos服务中心以及获取其他已注册的服务实例列表。下面是一个简单的RESTful API控制器例子,它展示了如何查询名为`userservice`的服务地址信息: ```java @RestController @RequestMapping("/service") public class ServiceController { @Autowired private DiscoveryClient discoveryClient; @GetMapping("/{serviceName}") public List<ServiceInstance> getServiceInstances(@PathVariable String serviceName){ return this.discoveryClient.getInstances(serviceName); } } ``` #### 设置负载均衡策略 针对分布式系统的多区域部署场景下可能出现较高的网络延迟问题,可以通过调整Ribbon客户端默认的行为模式——即设定自定义化的IRule算法类名属性为`NacosRule`,从而优化跨数据中心请求路由逻辑,确保尽可能优先选取同一机房内的目标节点执行远程过程调用(RPC)[^4]。 ```yaml # application.yml snippet for setting up load balancing rule spring: cloud: nacos: discovery: cluster-name: LOCAL # Define your own cluster identifier here. userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule ``` #### 版本兼容性考量 鉴于不同版本之间可能存在潜在冲突或不稳定因素的影响,建议开发者依据实际需求选择合适的组件组合方案;例如,如果遇到某些特定情况下无法正常工作的状况,则考虑回退至较为稳定的旧版发布包进行尝试[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼睡不醒_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值