Мы использовали 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 Облачный клиент конфигурации запрашивает выборку конфигурации и передает заголовок
Accept: application/vnd.spring-cloud.config-server.v2+json
. В конфигурации Spring Cloud v 2.1
Обратите внимание, что версия Spring Cloud 2.1 не отправляет такой заголовок; вместо этого он отправляет 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 нет вывода журнала исключений!
Если я удалю заголовок accept, я получу ( версия 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 config.
- 2) Почему в журналах конфигурационной службы Spring отсутствует сообщение о NPE.
- 3) Если заголовок accept не указан, почему
"newResources": ""
стал пустой строкой, если я ожидал пустой массив.
На данный момент я могу удалить пустой массив из моей конфигурации, но это очень страшно, потому что наша конфигурация используется во многих сервисах! Это нарушает обратную совместимость.