Nacos Spring Boot 读取 yaml 失败报错问题

在使用Nacos version 1.4.1时遇到了Spring Boot应用无法正确读取yaml配置的问题。首先,发现预加载配置未开启,解决方法是在源码中启用nacos.config.bootstrap.enable。其次,出现'java.lang.IllegalArgumentException: 'value' must not be null'的空指针异常,调试过程中发现是由于未能从NacosPropertySource注解中获取到正确的data-id导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nacos version:1.4.1

application.class

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@NacosPropertySource(dataId = "flyaway", autoRefreshed = true)
public class NacosApplicaiton {

    @Value("${server.port:1}")
    private int port;

    @PostConstruct
    public void init() {
        System.out.println(port);
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosApplicaiton.class, args);
    }
}

application.yml

# 正确配置:
nacos:
  config:
    server-addr: 127.0.0.1:8848
    type: yaml
    bootstrap:
      enable: true
      log-enable: true
    data-id: flyaway
  discovery:
    server-addr: 127.0.0.1:8848

1. The preload configuration is not enabled

查看源码中还需要配置 nacos.config bootstrap.enable

NacosConfigApplicationContextInitializer.class

2. java.lang.IllegalArgumentException: 'value' must not be null 空指针问题

 Debug 到要读取data-id, 而未能读取 NacosPropertySource 注解下data-id

NacosConfigLoader.class

Spring Boot中,你可以使用Nacos作为配置中心,以便动态获取配置信息。下面是一些步骤来实现在Spring Boot读取Nacos配置文件: 1. 添加依赖:在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 2. 配置Nacos连接信息:在`application.properties`或`application.yml`中添加以下配置: ```yaml spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR:localhost:8848} spring.application.name=your-application-name spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE:} ``` 其中`${NACOS_SERVER_ADDR}`是Nacos服务器地址,`${NACOS_NAMESPACE}`是命名空间,`your-application-name`是你的应用名称。 3. 创建配置类:创建一个`@ConfigurationProperties`注解的类,用于绑定Nacos配置: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "your-config-prefix") public class YourConfigProperties { private String property1; private String property2; // getters and setters } ``` 这里的`your-config-prefix`是你在Nacos中存储配置的前缀。 4. 注入配置属性:在需要使用配置的地方,使用`@Autowired`注解将配置类注入: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class YourController { @Autowired private YourConfigProperties configProperties; @GetMapping("/your-endpoint") public String yourEndpoint() { String property1 = configProperties.getProperty1(); String property2 = configProperties.getProperty2(); // 使用配置属性做一些操作 return "Some result"; } } ``` 现在,你可以在`YourController`中使用注入的配置属性来读取Nacos配置文件中的值。 注意:确保Nacos服务器已经启动,并且配置文件已经在Nacos中正确配置。如果需要动态刷新配置,请参考Spring Cloud Alibaba的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值