头发一把一把掉 2021-12-15 11:40 采纳率: 0%
浏览 379

获取不到nacos配置中心的配置信息

获取不到nacos配置中心的配置信息

  • 自述
  • 工具以及环境
  • 使用的框架版本
  • 出现的问题
  • 我写的代码
  • 夫级pom依赖
  • 子级pom依赖
  • bootstrap.yaml的配置
  • 启动类代码
  • 前端控制器代码
  • 这是配置中心的配置信息

自述

小小的码农想请教一下了解微服务的资深家,能不能发现我现在的问题,想请教一下,我究竟是哪一步出现了问题。我也去nacos官网看了看,并没发相应的解决方法,害。困扰了我3天,大四的码农该何去何从

工具以及环境

mac环境
eclipse
maven 3,2,5
java 1,8,0

使用的框架版本

spring boot 2,2,7,RELEASE
spring-cloud-starter-alibaba-nacos-config 2,2,7,RELEASE

出现的问题

我通过两种方式想获取配置中心指定dataid中的配置信息,发现并没有获取出来。

方式一

通过写了前端控制器,利用@value标签获取,发现获取到的为null值

在这里插入图片描述

方式二

我在启动类里通过ConfigurableApplicationContextgetEnvironment().getProperty("user.name")获取配置信息,发现获取到的居然是本地电脑的用户名,并不是配置中心的信息

在这里插入图片描述

我写的代码

夫级pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 三坐标 -->
    <groupId>com.ziqiu</groupId>
    <artifactId>springcloud-nacos-service</artifactId>
    <version>1.0</version>

    <!-- 工程名称描述 -->
    <name>springcloud-nacos-service</name>
    <description>nacos服务工程</description>

    <!-- 子模块 -->
    <modules>
        <module>springcloud-nacos-a-config</module>
    </modules>

    <!-- 打包方式 -->
    <packaging>pom</packaging>

    

    <!-- 在 properties下声明相应的版本信息,然后在dependency下引用的时候用 ${} 就可以引入该版本jar包了 -->
    <properties>
        <!-- 编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- jdk -->
        <java.version>1.8</java.version>

        <!-- SpringBoot -->
        <platform-bom.version>Cairo-SR3</platform-bom.version>

        <!-- SpringCloud -->
        <spring-cloud-dependencies.version>Finchley.RELEASE</spring-cloud-dependencies.version>
    </properties>

    <!-- 依赖 jar 包版本管理的管理器 -->
    <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
    <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
    <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
    <dependencyManagement>
      <dependencies>  
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.7.RELEASE</version>
        </dependency>
            
      </dependencies>
    </dependencyManagement>

</project>

子级pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.siyiface.hello</groupId>
    <artifactId>springcloud-nacos-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud-nacos-config</name>
    <description>nacos-provider</description>

    <parent>
        <groupId>com.ziqiu</groupId>
        <artifactId>springcloud-nacos-service</artifactId>
        <version>1.0</version>
    </parent>
    
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency> -->

         <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        
    </dependencies>


    

</project>

bootstrap.yaml的配置

1.因为我使用的是yaml格式,我也在配置文件中声明了

server:
  port: 8080
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

启动类代码

package com.siyiface.ceshi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringcloudNacosConfigApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringcloudNacosConfigApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("useLocalCache");
        System.err.println("user name :"+userName+"; age: "+userAge);
    }

}

前端控制器代码

package com.siyiface.ceshi;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.nacos.api.config.annotation.NacosValue;

@RestController
@RequestMapping("/config")
@RefreshScope
public class controler {

    @Value("${server.port}")
    private String port;
    
    @Value("${user.name:}")
    private String name;
    
    @NacosValue(value="${useLocalCache:}",autoRefreshed=true)
    private String useLocalCachename;
    
    @RequestMapping("/get")
    public String get() {
        return port +" "+ name +" "+ useLocalCachename;
//        return useLocalCache;
    }
}

这是配置中心的配置信息

在这里插入图片描述

  • 写回答

1条回答 默认 最新

  • a1767028198 2021-12-15 14:16
    关注

    别写user.name,你改写成userinfo.name再看数据有没有
    这玩意很坑,简单来说,Environment里面是个list,系统环境(存在这个user.name的配置)和你的配置,如果都有相同的key, 谁在前,谁就是获取到的数据,所以,

    评论

报告相同问题?

问题事件

  • 创建了问题 12月15日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度