【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录)

这篇具有很好参考价值的文章主要介绍了【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

缘起 :项目需读取nacos中动态的TDengine数据库连接信息并提取IP,一个并不复杂的操作,但作为一个nacos知识浅薄的菜鸡,我愣是捯饬了几个小时……惭愧惭愧……

异常代码

@Data
@Component
public class TaosLink {
//    @Value("${spring.datasource.dynamic.datasource.taos.url}")
    @Value("${spring.datasource.tdengine.datasource.jdbc-url}")
    private String url;
}

报错信息

报错核心:

Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder ‘spring.datasource.tdengine.datasource.jdbc-url’ in value “${spring.datasource.tdengine.datasource.jdbc-url}”

具体报错:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'handleData' defined in file [E:\3H1Work\WanRuiIOT\iot-platform\blade-service\dl-iot-manager\target\classes\org\springblade\modules\component\netty\ws\service\HandleData.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'environmentalKrDeviceServiceImpl' defined in file [E:\3H1Work\WanRuiIOT\iot-platform\blade-service\dl-iot-manager\target\classes\org\springblade\modules\dataScreen\service\impl\EnvironmentalKrDeviceServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 7; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'purityAnalysisServiceImpl' defined in file [E:\3H1Work\WanRuiIOT\iot-platform\blade-service\dl-iot-manager\target\classes\org\springblade\modules\dataScreen\service\impl\PurityAnalysisServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 5; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'taosLink': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.tdengine.datasource.jdbc-url' in value "${spring.datasource.tdengine.datasource.jdbc-url}"
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:164)
	at org.springblade.core.launch.BladeApplication.run(BladeApplication.java:50)

异常原因

以上报错通常是由于配置文件异常导致的,即没有找到对应的配置信息。首先我们需要查看当前模块的nacos配置信息,并核验当前nacos所处的命名空间是否包含以上异常代码中的配置属性。

排查过程

  • 1、查看nacos配置信息(group为dl-iot-manage

【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis

  • 2、根据nacos配置信息核验需属性是否在对应的配置文件内(nacos中spring.datasource.tdengine.datasource.jdbc-url 所属配置的group为 dl-iot-link 与 项目的nacos配置不同,即产生异常的根本原因修改项目中nacos配置信息或将所需的配置属性添加到nacos配置信息指定的配置文件,即可解决异常)

【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis

  • 3、将配置属性地址修改为项目nacos配置中指定的命名空间和组,然后重启,报错消失

    • 无异常代码

      @Data
      @Component
      public class TaosLink {
      	@Value("${spring.datasource.dynamic.datasource.taos.url}")
          private String url;
      }
      
    • 与项目中nacos配置匹配的命名空间和组

      【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis

  • 解析配置属性,提取IP地址

        // 注入配置所属的类
    	@Resource
    	private final TaosLink taosLink;
    
        public String getTaosUrl(){
            String url = taosLink.getUrl();
            // 提取IP地址的正则表达式
            String regex = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
    
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(url);
            String group = "";
            if (matcher.find()){
                group = matcher.group();
            }
            log.info("IP信息: " + group);
            return String.format(IotRedisContant.TAOS_URL, group);
        }
    
  • 运行结果
    【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis

项目中nacos配置正常仍无法获取属性

确认项目中nacos的配置和nacos中yaml文件的基础信息无误后仍无法读取指定属性值,建议检查项目运行时本地生成的yaml文件,查看文件中是否含有所需属性。如果本地不存在yaml文件则说明nacos连接信息有误,需检查nacos的运行状况;如果本地存在yaml文件但文件中没有所需属性,则说明nacos中部署的配置文件不含所需属性。本地生成的文件地址如下:

  • 项目运行产生的nacos文件夹

    【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis

  • 文件夹中生成的yaml文件

    【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录),学习笔记,SpringBoot,nacos,spring boot,java,mybatis文章来源地址https://www.toymoban.com/news/detail-805884.html

Over!

到了这里,关于【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot读取Nacos配置文件失败,报Could not resolve placeholder ‘xxx’ in value ‘${xxx}’

    在使用@Value注解去获取nacos配置文件时,启动服务报错,报Could not resolve placeholder ‘xxx’ in value ‘${xxx}’ 一班出现这个问题需要排查以下几点: 1.@Value注解内是否有拼写错误 2.nacos相关配置是否写入bootstrap.yml文件 3.nacos配置文件所在命名空间是否与bootstrap.yml文件内所声明的命

    2024年02月05日
    浏览(51)
  • 禁用AMQP配置中的明文身份验证机制(包含Springboot结果测试+踩坑)

    最近公司内网部署RabbitMQ服务器,部署上测试后安全部门扫描到MQ服务器有一个漏洞【禁用AMQP配置中的明文身份验证机制】。本文记录解决该漏洞的过程和方法,以及遇到的问题 主要步骤为: 在服务器生成所需的两对密钥和CA证书,然后将CA、服务器公私钥放到Rabbit目录下并

    2024年02月14日
    浏览(34)
  • SpringBoot读取配置文件中的内容

    配置文件application.yml: Environment 是 springboot 核心的环境配置接口,它提供了简单的方法来访问应用程序属性,包括系统属性、操作系统环境变量、命令行参数、和应用程序配置文件中定义的属性等等。 Springboot 程序启动加载流程里,会执行SpringApplication.run中的prepareEnvironmen

    2024年01月21日
    浏览(62)
  • SpringBoot从数据库读取数据数据源配置信息,动态切换数据源

            首先准备多个数据库,主库smiling-datasource,其它库test1、test2、test3         接下来,我们在主库smiling-datasource中,创建表databasesource,用于存储多数据源相关信息。表结构设计如下         创建好表之后,向表databasesource中存储test1、test2、test3三个数据库的相关配置

    2024年01月16日
    浏览(67)
  • 【SpringBoot】读取application.yml配置中的三种方式

    applicaiton.yml BootValueApplicationTests.java 打印如下所示 注意的地方 当对应的值不存在时,系统会报错。我们可以给定一个默认值即可。 如下所示: 在这里,sys.noValue这个值是不存在的,我们可以给定一个默认值为123,当然,我们如果不指定默认值的,它的默认值为空字符串。 优

    2024年02月13日
    浏览(52)
  • SpringBoot3中的属性绑定注解和YMAL配置文件、日志

    SpringBoot摒弃XML配置方式,改为 全注解驱动 1. 组件注册 @Configuration 、 @SpringBootConfiguration @Bean 、 @Scope @Controller 、 @Service 、 @Repository 、 @Component @Import @ComponentScan 步骤: 1、@Configuration 编写一个配置类 2、在配置类中,自定义方法给容器中注册组件。配合@Bean 3、或使用@Import

    2024年02月11日
    浏览(54)
  • Nacos配置中心中配置文件的创建、微服务读取nacos配置中心

    在企业项目中会有非常多的服务,不同的开发环境还有不同的配置文件,所以就导致配置文件非常多。 那么肯定就会有一些公共配置,多个服务都是使用过一样的,那么就可以使用配置中心来进行统一管理,避免修改一个配置项要去各个服务都改一遍。 使用传统方式的配置

    2024年02月02日
    浏览(41)
  • 多环境下如何“读取”Nacos中相应的配置

    在实际开发中,通常一个系统会准备开发环境、测试环境、预发环境、正式环境 那么如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢 本文主要对Nacos作为配置中心时,如何对多环境配置文件进行读取进行论述。 # 我的环境 Windows10 JDK8 SpringCloud:Finchl

    2024年02月06日
    浏览(32)
  • logback实现读取spring和nacos的动态配置

    例如在这里我们设置了一个spring.application.name的参数 注:这里的scope可以选择content和local,如果集成了其他组件(例:logstash)并且希望此字段发出去,name设置为content,如果只是在此文件中使用,则设置为local  是在这里就定义了一个appName的属性,数据来源于spring.application

    2024年02月12日
    浏览(37)
  • ChatGPT在语义理解和信息提取中的应用如何?

    ChatGPT在语义理解和信息提取领域有着广泛的应用潜力。语义理解是指对文本进行深层次的理解,包括词义、句义和篇章义等层面的理解。信息提取是指从文本中自动抽取结构化的信息,如实体、关系、事件等。ChatGPT作为一种预训练语言模型,具有丰富的语义理解和上下文感

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包