windows机器使用spring.config.import配置项与nacos作为配置和注册中心, 提示找不到nacos:xxx.yml配置文件的一次问题及处理

场景:

使用springboot + springcloud +springcloud Alibaba 为基础架构的微服务项目, 使用nacos作为配置中心以及yaml文件作为配置文件格式完成项目配置, 公司提供的一台window服务器, 启动nacos正常, 但是启动服务模块时报错, 导致无法启动项目, 不存在端口占用, 依赖未引入, 端口对不上, 文件后缀不对, 配置文件内部配置错误等等各种常见低级错误;

使用版本

nacos为2.1.1版本, 端口改了8858

<spring-boot.version>2.7.2spring-boot.version>
<spring-cloud.version>2021.0.3spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.1.0spring-cloud-alibaba.version>
微服务模块

基本所有的模块都是通用的这种配置, ip以通过hosts映射, 固定读取nacos上的一个 application-profile 配置和一个对应服务名称的配置, 与profile相关, 默认在父pom中配置了dev, 使用默认的DEFAULT_GROUP, 默认的namespace

springboot 2.4开始引入了 spring.config.import配置项, 可以通过这个配置项来引入配置文件, spring-cloud-alibaba也在issue中说明已支持该方式来获取nacos配置 issue2905

server:
  port: 9400
spring:
  application:
    name: @artifactId@
  cloud:
    inetutils:
      preferred-networks:
        - 192.168
    nacos:
      discovery:
        server-addr: ${NACOS_HOST:xxx-nacos}:${NACOS_PORT:8858}
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
  config:
    import:
      - nacos:application-@[email protected]
      - nacos:${spring.application.name}-@[email protected]

问题

个人使用MacBook做开发机 zulu jdk1.8, 此项目架构在之前的项目中也使用过, 部署在Linux上 openjdk 1.8, 在本机idea启动, 以及使用java -jar命令启动完全没有任何问题, 但是在windows机器上 openjdk 1.8, 启动后提示以下类似信息:

Description:

Config data resource 'NacosConfigDataResource{properties=NacosConfigProperties{serverAddr='xxxx:8848', encode='null', group='DEV_GROUP', prefix='null', fileExtension='yml', timeout=3000, maxRetry='null', configLongPollTimeout='null', configRetryTime='null', enableRemoteSyncConfig=false, endpoint='null', namespace='1d70a448-8aaf-40eb-9119-0540c8e8aade', accessKey='null', secretKey='null', ramRoleName='null', contextPath='null', clusterName='null', name='null'', shares=null, extensions=null, refreshEnabled=true}, optional=false, profiles=[Profiles@35d176f7 active = '[dev]', default = '[default]', accepted = '[dev]'], config=NacosItemConfig{group='DEV_GROUP', dataId='aaa.yml', suffix='yml', refreshEnabled=true}}' via location 'nacos:aaa.yml' does not exist

Action:

Check that the value 'nacos:aaa.yml' at class path resource [application-dev.yml] from myjar.jar - 34:9 is correct, or prefix it with 'optional:'

简单看下说找到不到配置文件, 但是通过nacos接口直接能够获取到配置文件数据

#http://127.0.0.1:8858/nacos/v1/cs/configs?dataId=application-dev.yml&group=DEFAULT_GROUP

#prints out
spring:
  elasticsearch:
    uris: http://xxx-elastic:9200
    username: xxx
    password: xxx
...
...

csdn上没找到类似问题, 在github上目前看到有且仅有这么一个issue提了一下 issue2745, 上面俩人的问题都是恰巧成功了, 但又没有包含多个场景


解决方案:

通过上述issue, 加上自己测试, 最后解决办法: 删除配置文件所有的注释以及中文字符, 包括配置项的 key 和 value 中的中文字符, 最后服务正常启动注册拿到配置文件, 可能是系统和客户端字符集处理的问题吗?

你可能感兴趣的:(java,java,spring,boot,spring,cloud)