SpringCloud高版本使用nacos配置中心通过 @Value 注解进行配置信息获取的例子无法生效的问题

本文讲述了在SpringCloud高版本中,使用Nacos配置中心时遇到@Value注解无法从配置中心获取信息的问题。低版本可以通过配置文件正常获取,而高版本必须直接在Nacos发布配置信息。

背景

在学习项目的时候,自己用的SpringCloud和SpringBoot版本比课程中老师所用的版本高出来不少,甚至nacos也很高,在nacos的配置中心项目演示中跟老师的配置方法都不一样,但又不甘心降低版本。

老师的配置方法

老师是通过bootstrap.properties配置文件进行nacos配置中心的配置

导入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

创建bootstrap.properties

spring.application.name=xxx
spring.cloud.nacos.config.server-addr=xxx.x.x.x:xxxx

Controller中添加@RefreshScope注解

高版本配置方法

导入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

配置application.yml

spring:
  cloud:
    nacos:
      serverAddr: xxx.x.x.x:xxxx
  config:
    import:
      - nacos:gulimall-coupon.properties?refresh=true

重点来了

低版本中的@Value 注解获取配置信息写在配置文件中不影响nacos配置中心的配置。

高版本中写在配置文件中,nacos配置中心如何配置都只会读取配置文件中的配置信息

高版本通过 @Value 注解进行配置信息的获取,不能在配置文件中体现,直接用nacos发布!!!

Spring Cloud使用 `@Value` 注解读取 Nacos 的 YAML 配置需要进行一系列的配置和依赖设置,以确保外部化配置能够被正确加载并支持动态刷新。 ### 基本流程 1. **引入必要的依赖** 确保项目中已经引入了 Spring Cloud Alibaba Nacos Config Starter 以及 Bootstrap Starter。这些依赖是使 Nacos 配置中心生效的基础。 ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2023.x.x</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> ``` 2. **配置 Nacos Server 地址及命名空间** 在 `bootstrap.yml` 文件中配置连接 Nacos 服务器的相关信息,包括服务地址、命名空间 ID 和文件扩展名(如 `yaml`)。注意:如果使用的是 YAML 格式配置文件,则必须添加 `file-extension: yaml`,否则默认会尝试加载 `.properties` 文件。 ```yaml spring: application: name: example profiles: active: dev cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: c845e96f-4423-4618-8c26-5e4d510f566a file-extension: yaml ``` 3. **启用配置自动刷新功能** 确保在主应用类或某个配置类上添加了 `@RefreshScope` 注解,这样 `@Value` 注解所标注的字段才能响应远程配置的更新[^1]。 ```java @SpringBootApplication @RefreshScope public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. **通过 `@Value` 注解注入配置值** 在业务代码中使用 `@Value("${key}")` 来获取 Nacos 上对应的配置项值。例如: ```java @RestController public class ConfigController { @Value("${user.config}") private String userConfig; @GetMapping("/config") public String getConfig() { return "User Config: " + userConfig; } } ``` 5. **验证配置文件命名规范与格式** 如果无法获取到预期的值,请检查以下几点: - Nacos 配置文件名称是否符合命名规则:`<prefix>-<active-profile>.<file-extension>`,例如:`example-dev.yaml`。 - 确认 `bootstrap.yml` 中的 `spring.application.name` 与 Nacos 配置文件的前缀部分一致,并且不包含后缀。 - 检查 `file-extension` 是否设置为 `yaml`,并在 Nacos 中确实创建了对应格式的配置文件[^2]。 6. **测试配置热更新** 修改 Nacos 中的配置内容并发布,观察应用程序是否会接收到新的配置值而无需重启。这可以通过访问 `/config` 接口来验证配置是否已更新。 --- ### 示例配置文件结构 #### Nacos配置文件内容(test.yml) ```yaml user: config: "Nacos YAML Value" ``` #### 应用程序中的 `bootstrap.yml` ```yaml spring: application: name: example profiles: active: test cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: c845e96f-4423-4618-8c26-5e4d510f566a file-extension: yaml ``` --- ### 注意事项 - 如果配置生效,可能是由于 Spring Boot 没有识别到 `bootstrap.yml` 或者 `application.properties` 中存在冲突配置,请删除或注释掉不必要的配置项。 - 动态刷新功能依赖于 Spring Cloud 的上下文刷新机制,因此确保 `@RefreshScope` 已正确应用[^3]。 - 若仍然存在问题,可查看日志输出确认配置是否成功拉取,或者检查网络连接是否正常。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值