Nacos读取json配置信息无法使用ConfigService

本文解决了一个关于Nacos中@NacosInjected无法正确获取ConfigService的问题。通过深入研究源码,作者发现ConfigService未被Spring托管,最终通过NacosConfigManager成功注入并获取JSON数据。

这里写自定义目录标题


Nacos 使用 @NacosInjected无法获取到 ConfigService,访问接口时提示该注入类为null,导致我无法通过她的
String getConfig(String dataId, String group, long timeoutMs) throws NacosException;
这个方法获取json数据,

在这里插入图片描述

在这里插入图片描述
这是有问题的代码,看了十多分钟,最后翻开源码
可以清楚的看到这张图的类对象并没有让spring托管
在这里插入图片描述
根据启动时的debug找到了configService的父类工厂类,从工厂类上追到nacos本身的配置启动类,发现配置管理类加上了@bean,说明只有通过她NacosConfigManager才能注入,
在这里插入图片描述
可以看到下图这里是我直接从spring取了NacosConfigManager,这样就可以取到json了
在这里插入图片描述

使用 Nacos 作为配置中心的 Spring Cloud 应用中,验证 Nacos 配置文件是否被成功读取是确保应用正常运行的重要步骤。以下是一些常用的方法来验证 Nacos 配置是否被正确加载和读取。 ### 1. 使用 `@Value` 注解获取配置值 可以通过 `@Value` 注解从 Spring 的 `Environment` 中获取 Nacos 配置中心的配置项,并将其注入到 Bean 中进行输出或日志记录。 ```java @RestController public class ConfigController { @Value("${user.id}") private String userId; @GetMapping("/config") public String getConfig() { return "User ID from Nacos: " + userId; } } ``` 当访问 `/config` 接口时,如果返回了正确的 `user.id` 值,则说明该配置项已经成功从 Nacos 加载[^5]。 --- ### 2. 使用 `Environment` 对象直接获取配置 除了 `@Value` 注解,还可以通过 `Environment` 对象手动获取配置属性。 ```java @Autowired private ConfigurableApplicationContext applicationContext; @GetMapping("/configs") public String configs() { return "已成功获取Nacos配置中心的数据:(id:" + applicationContext.getEnvironment().getProperty("user.id") + ")"; } ``` 此方法适用于需要动态获取多个配置项的场景。如果返回值中包含预期的配置内容,则表示 Nacos 配置已被正确加载[^5]。 --- ### 3. 查看启动日志确认配置加载状态 Spring Boot 在启动过程中会打印与配置相关的日志信息,包括 Nacos 配置的拉取情况。可以在日志中搜索如下关键词: - `Fetching config from server at : http://...` - `Located property source: [BootstrapPropertySource {name='...'}]` 这些日志表明 Spring Boot 已成功连接到 Nacos Server 并加载了远程配置。 此外,Nacos Client 还会在日志中记录本地缓存的配置文件路径,例如: ``` INFO c.a.n.c.c.impl.LocalConfigRepository - LOCAL_SNAPSHOT_PATH: /home/user/nacos/config ``` 这有助于确认配置是否被正确写入本地快照文件[^4]。 --- ### 4. 检查 Nacos 客户端本地缓存 Nacos 客户端会在本地生成一个缓存目录(默认路径为 `${user.home}/nacos/config`),用于保存从服务端拉取的配置文件。可以手动查看该目录下的 `.json` 或 `.properties` 文件,确认其内容是否与 Nacos 控制台中的配置一致。 例如: ``` /home/username/nacos/config/DEFAULT_GROUP%40%40application.properties ``` 如果该文件存在且内容匹配,则说明配置已成功加载并缓存[^3]。 --- ### 5. 启用 Actuator 端点查看当前配置 在 Spring Boot 项目中启用 Spring Boot Actuator,并添加如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 然后在 `application.yml` 中开启 `/actuator/env` 端点: ```yaml management: endpoints: web: exposure: include: "*" ``` 启动后访问: ``` http://localhost:8080/actuator/env ``` 在返回的 JSON 数据中查找 `configService` 相关的配置项,如 `user.id`,即可确认是否从 Nacos 成功加载。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值