nacos2023.x读取不到配置
Closed this issue · 12 comments
yibird commented
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
misakacoder commented
写法改成这样了
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 commented
@misakacoder 感谢你,等下我试试。
yibird commented
还是不行, 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 commented
yibird commented
读的就是 env 这个配置
yibird commented
最上面的例子是另外一台电脑的 下面是公司电脑的
pei-han commented
@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 commented
你的配置改一下在试试
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 commented
问题解决了,我使用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"
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;
}
}
由于加了日志,启动项目就会出现读取配置的信息:
misakacoder commented
读的就是 env 这个配置
我就是按官网最新文档配置的,这样就可以的,我的Nacos是启动的源码,应该和这个没关系
spring:
application:
name: alibaba-auth
cloud:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config:
namespace: spring-cloud-alibaba
import-check:
enabled: false
discovery:
namespace: spring-cloud-alibaba
config:
import:
- nacos:${spring.application.name}.yml?refreshEnabled=true
yibird commented
你是用docker安装的?是多少版本?
yibird commented
你用docker 安装nacos-server 只开放8848端口 就有可能出现我遇到的问题