使用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 中的中文字符
, 最后服务正常启动注册拿到配置文件, 可能是系统和客户端字符集处理的问题吗?