Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos2023.x读取不到配置 #3915

Open
yibird opened this issue Dec 2, 2024 · 9 comments
Open

nacos2023.x读取不到配置 #3915

yibird opened this issue Dec 2, 2024 · 9 comments

Comments

@yibird
Copy link

yibird commented Dec 2, 2024

2023版本现在连group和namespace的配置都没有了。SpringBoot配置如下:

spring:
  cloud:
    nacos:
      config:
        enabled: true
        # nacos server 地址
        server-addr: 172.26.32.1:8848
        # nacos 用户名
#        username:
        # nacos 用户名密码
#        password:
        # 是否启用导入检查
        import-check:
          enabled: false
        # 配置前缀,prefix是构成 dataId 的成员之一,如果不指定prefix,则默认使用spring.application.name
        # DataId 是 Nacos 配置管理中的关键组成部分,它用来区分不同的配置集。每个配置项都有一个唯一的 DataId,
        # 这使得用户可以方便地管理和检索特定的配置信息。例如,一个微服务应用可能会根据不同的环境(如开发、测试、生产)
        # 使用不同的配置文件,这时就可以用不同的 DataId 来表示这些配置文件。
        # 在Nacos Spring Cloud 中dataId的默认格式是: ${prefix}-${spring.profiles.active}.{file-extension}
        # 若未指定prefix,则默认使用${spring.application.name}
        prefix: ${spring.application.name}
        # 文件扩展名格式,默认 properties
        file-extension: yaml
        # 是否开启自动刷新,默认true
        refresh-enabled: true

  # 配置激活环境为dev
  profiles:
    active: dev
  # 应用名称
  application:
    name: config

server:
  port: 18084
management:
  endpoints:
    web:
      exposure:
        include: "*"

logging:
  level:
    com:
      alibaba:
        cloud:
          nacos:
            client: debug

nacos 配置:
image
读取配置时一直读取不到。

@misakacoder
Copy link

写法改成这样了

spring:
  cloud:
    nacos:
      serverAddr: 127.0.0.1:8848
      # 以下配置项必须填写
      username: 'nacos'
      password: 'nacos'
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true&group=DEFAULT_GROUP

@yibird
Copy link
Author

yibird commented Dec 3, 2024

@misakacoder 感谢你,等下我试试。

@yibird
Copy link
Author

yibird commented Dec 3, 2024

还是不行, application.yml:

spring:
  # 应用名称
  application:
    name: config
  # 配置激活环境为dev
  profiles:
    active: dev
  # Nacos配置
  cloud:
    nacos:
      config:
        enabled: true
        server-addr: 172.27.96.1:8848
        import-check:
          enabled: false
        # 配置前缀,prefix是构成 dataId 的成员之一,如果不指定prefix,则默认使用spring.application.name
        # DataId 是 Nacos 配置管理中的关键组成部分,它用来区分不同的配置集。每个配置项都有一个唯一的 DataId,
        # 这使得用户可以方便地管理和检索特定的配置信息。例如,一个微服务应用可能会根据不同的环境(如开发、测试、生产)
        # 使用不同的配置文件,这时就可以用不同的 DataId 来表示这些配置文件。
        # 在Nacos Spring Cloud 中dataId的默认格式是: ${prefix}-${spring.profiles.active}.{file-extension}
        # 若未指定prefix,则默认使用${spring.application.name}
        prefix: ${spring.application.name}
        # 文件扩展名格式,默认 properties
        file-extension: yaml
        # 开启自动刷新
        refresh-enabled: true
        import:
          - nacos:config-dev.yaml?refreshEnabled=true&group=DEFAULT_GROUP
        username: 'nacos'
        password: 'nacos'
logging:
  level:
    com:
      alibaba:
        cloud:
          nacos:
            client: debug

启动类:

@SpringBootApplication
@RestController
@RefreshScope // 开启nacos配置自动刷新
public class NacosConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        String env = applicationContext.getEnvironment().getProperty("env");
        System.out.println("env:" + env);
    }

    // 读取nacos 名为configName的配置,若配置不存在则使用 default-env 作为默认值
    @Value("${env:default-env}")
    private String env;

    @GetMapping("/getEnv")
    public String getEnv() {
        return "env:" + env;
    }
}

@misakacoder
Copy link

image

不是读取key为configName的配置嘛,咋是env

@yibird
Copy link
Author

yibird commented Dec 3, 2024

读的就是 env 这个配置

@yibird
Copy link
Author

yibird commented Dec 3, 2024

最上面的例子是另外一台电脑的 下面是公司电脑的

@pei-han
Copy link

pei-han commented Dec 3, 2024

@yibird 请问,你的问题解决了吗?
我升级spring 6.x,spring boot 3.x,spring cloud 2023,spring cloud alibaba 2023之后也遇到这样的问题,读取不到nacos中的配置,我使用的nacos server是2.3版本,将nacos-config 2023的传递依赖nacos-client换成2.3,问题依旧

@huangkanglin1996
Copy link

huangkanglin1996 commented Dec 3, 2024

你的配置改一下在试试

spring:
  application:
    name: xxxxx
  cloud:
    nacos:
      username: xx
      password: xx
      server-addr: 172.27.96.1:8848
      # 命名空间变成了公共的了,不知道为啥
      namespace: 你的命名空间
      discovery:
        namespace: 你的命名空间
        group: DEFAULT_GROUP
  # 注意看层级,config和nacos一个层级了。
  config:
    import:
      #这里弄个 namespace=命名空间 不生效要在上面弄个公共才可以
      - nacos:config-dev.yaml?refreshEnabled=true&group=DEFAULT_GROUP

#3882

@yibird
Copy link
Author

yibird commented Dec 3, 2024

问题解决了,我使用docker安装nacos-server,读取配置前只开放了8848端口,由于nacos2.x 引入GRPC优化通讯效率,需要额外开放9848、9849端口。docker安装nacos-server:

docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone nacos/nacos-server

我使用了官网的一个例子用于向nacos-server导入配置(172.26.32.1是本机ip):

curl -X POST "http://172.26.32.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=spring.cloud.nacos.config.serverAddr=172.26.32.1:8848%0Aspring.cloud.nacos.config.prefix=PREFIX%0Aspring.cloud.nacos.config.group=GROUP%0Aspring.cloud.nacos.config.namespace=NAMESPACE"

image
我自己也创建了一个配置:
image

application.yml配置:

server:
  port: 18084

spring:
  application:
    name: nacos-config-example
  cloud:
    nacos:
      config:
        serverAddr: 172.26.32.1:8848
        username: 'nacos'
        password: 'nacos'
        import-check:
          enabled: false
        # 配置前缀,prefix是构成 dataId 的成员之一,如果不指定prefix,则默认使用spring.application.name
        # DataId 是 Nacos 配置管理中的关键组成部分,它用来区分不同的配置集。每个配置项都有一个唯一的 DataId,
        # 这使得用户可以方便地管理和检索特定的配置信息。例如,一个微服务应用可能会根据不同的环境(如开发、测试、生产)
        # 使用不同的配置文件,这时就可以用不同的 DataId 来表示这些配置文件。
        # 在Nacos Spring Cloud 中dataId的默认格式是: ${prefix}-${spring.profiles.active}.{file-extension}
        # 若未指定prefix,则默认使用${spring.application.name}
        prefix: ${spring.application.name}
        # 文件扩展名格式,默认 properties
        file-extension: properties
        # 开启自动刷新,当配置发生变化后自动推送并刷新
        refresh-enabled: true
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true&group=DEFAULT_GROUP
      - nacos:config-dev.yml?refreshEnabled=true&group=DEFAULT_GROUP
management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: '*'
logging:
  level:
    com.alibaba.cloud.nacos.configdata: debug

读取配置类:

package com.fly.example;

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

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/nacos/annotation")
@RefreshScope
public class ValueAnnotationExample {

	@Value("${spring.cloud.nacos.config.serverAddr:}")
	private String serverAddr;

	@Value("${spring.cloud.nacos.config.prefix:}")
	private String prefix;

	@Value("${spring.cloud.nacos.config.group:}")
	private String group;

	@Value("${spring.cloud.nacos.config.namespace:}")
	private String namespace;

	@Value("${env:default-env}")
	private String env;

	@GetMapping
	public Map<String, String> getConfigInfo() {
		Map<String, String> result = new HashMap<>(5);
		result.put("serverAddr", serverAddr);
		result.put("prefix", prefix);
		result.put("group", group);
		result.put("namespace", namespace);
		result.put("env", env);
		return result;
	}
}

由于加了日志,启动项目就会出现读取配置的信息:

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants