gpt4 book ai didi

java - Spring Cloud 配置将文件中的数组抛出 NPE 为空

转载 作者:行者123 更新时间:2023-12-01 17:14:48 24 4
gpt4 key购买 nike

我们使用 Spring Cloud Config 版本 2.1 并且它有效。我们更新到了Spring Cloud Config 2.2,现在它不起作用了。更多细节是 https://github.com/spring-cloud/spring-cloud-config/issues/1599我报告这个问题也是为了加快进程,或者也许这不是一个问题。我不知道,所以请你帮忙。

我们的配置文件:python-service.yml

resources:
- resource1
- resource2

newResources: []

据我所知,Spring Cloud 配置客户端发出请求来获取配置,并传递 header

接受:application/vnd.spring-cloud.config-server.v2+json。在 Spring Cloud 配置 v 2.1 中

注意,Spring Cloud 2.1 版本不发送此类 header ;相反,它发送 Accept: application/json

HTTP http://localhost:8888/python-service/dev
Accept: application/vnd.spring-cloud.config-server.v2+json

返回

{
"name": "python-service",
"profiles": [
"dev"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "file:/configuration/python-service.yml",
"source": {
"resources[0]": "resource1",
"resources[1]": "resource2",
"newResources": []
}
}
]
}

但是,Spring Cloud Config v 2.2 失败了

{
"timestamp": "2020-04-24T08:38:19.803+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Could not construct context for config=python-service profile=dev label=null includeOrigin=true; nested exception is java.lang.NullPointerException",
"path": "/python-service/dev"
}

有趣的是config-service日志中没有任何异常日志输出!

如果我删除接受 header ,我将得到(版本 2.2)

{
"name": "python-service",
"profiles": [
"dev"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "file:/configuration/python-service.yml",
"source": {
"resources[0]": "resource1",
"resources[1]": "resource2",
"newResources": ""
}
}
]
}

这里,如果 "newResources": "" 应该是一个空数组,为什么它会变成一个空字符串 - 另一个问题。

总结

  • 1) 如何在 Spring Cloud 配置中使用空数组。
  • 2)为什么Spring配置服务日志中没有关于NPE的日志消息。
  • 3) 如果没有接受 header ,为什么 "newResources": "" 会变成空字符串(如果我期望的是空数组)。

就目前而言,我可以从我的配置中删除空数组,但这非常可怕,因为我们的配置在许多服务中使用!这破坏了向后兼容性。

最佳答案

事实证明,这是 Spring Boot 中的一个错误。

https://github.com/spring-cloud/spring-cloud-config/issues/1572#issuecomment-620496235

https://github.com/spring-projects/spring-boot/issues/20506

可能的选项:

  • 1) 等待修复并更新库。

  • 2) 我们做了什么。我们用空元素替换了空数组。

newResources:
anotherField: value

或者,使用null。但是,请确保您的代码可以处理它。另外,emptyArray 可以被视为 emptyString。我在调试器中发现了这一点。

关于java - Spring Cloud 配置将文件中的数组抛出 NPE 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61404703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com