springcloud使用nacos配置中心不读取nacos取配置

参考官方例子编写配置

https://github.com/alibaba/sp...

环境代码:

pom:

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
    </properties>

    <dependencies>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- openfeign 远程调用 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--openfeign 需要 loadbalancer -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</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>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.1.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
                <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

bootstrap.properties

spring.cloud.nacos.config.server-addr=192.168.1.104:8848
spring.application.name=coupon

CouponController.java

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    /** 从 Nacos 配置中心读取配置 */
    @Value("${coupon.user.name}")
    private String userName;

    @Value("${coupon.user.age}")
    private Integer userAge;

    @RequestMapping("/test")
    public R test() {
        return R.ok().put("name", userName).put("age",userAge);

    }
}

application.properties

coupon.user.name=zhansan
coupon.user.age=19


问题描述

项目启动无报错,但是不能读取到 Nacos 中配置的数据,而且似乎是根本没有连接到Nacos(注册中心功能可以正常注册),因为如果注释掉application.propertis中的属性 coupon.user.name 则会直接报错,提示@Value("${coupon.user.name}") 读不到配置;

Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。

在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。

根据上面官方例子中的原理的说明 Nacos Config Starter 实现PropertySourceLocator接口,而我在其实现类中debug并没有执行,由此判断是可能没有连接Nacos, 有熟悉这块的可以给点意见吗?

再就是maven依赖中的一个问题, 这里点击spring-cloud-starter-alibaba-nacos-config进入其pom中有依赖是爆红的,而且.m2/repository 中确实是没有爆红的这些jar包,不知道这个问题是否有影响;

导致Nacos中有些配置类 @ConditionalOnClass 没有生效。

        <!-- Nacos 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

阅读 7.6k
1 个回答

原因是 最新版本(2021.0.1.0)移除了 spring-cloud-starter-bootstrap 的支持,改用 spring.config.import

解决方法: https://github.com/alibaba/sp...

2021.0.1.0 Latest
⭐️ Features / Enhancements
[Nacos Config] Support spring.config.import (#2349 )
[Nacos Config] Remove dependency spring-cloud-starter-bootstrap (#2349 )
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏