Я настроил Spring Cloud Config сервер, как это:Spring config config server. Переменные окружения в свойствах
@SpringBootApplication
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
Я использую «родной» профиль, чтобы свойства подобраны из файловой системы:
server.port=8888
spring.profiles.active=native
spring.cloud.config.server.native.search-locations: classpath:/global
Сейчас сложно что некоторые свойства содержат переменные окружения. Свойства в «глобальный/application-production.properties» настроены так:
test=${DOCKER_HOST}
Когда пускаю Config сервера - все работает отлично. Однако, когда я достигаю http://localhost:8888/testapp/production я вижу это:
{
name: "testapp",
profiles: [
"production"
],
label: null,
version: null,
propertySources: [
{
name: "classpath:/global/application-production.properties",
source: {
test: "${DOCKER_HOST}"
}
}
]
}
Так значение из переменной ENV не заменяющие $ {DOCKER_HOST} положить, а возвращается как есть.
Но если доступ http://localhost:8888/application-production.properties, то результат будет не JSON, но довольно простой текст:
test: tcp://192.168.99.100:2376
Spring документация говорит:
Представления YAML и свойства имеют дополнительный флаг (при условии, как логическое параметр запроса resolvePlaceholders), чтобы сигнализировать, что заполнители в исходных документах в стандартной форме Spring $ {...} должны быть разрешены на выходе, где это возможно, перед рендерингом. Это полезная функция для потребителей, которые не знают о соглашениях о пружинных пружинах.
По какой-то причине resolvePlaceholders не работает для представления JSON, таким образом, сервер конфигурации клиенты должны быть осведомлены обо всех переменных ENV, настроенных на сервере.
Можно ли заставить JSON-представление resolvePlaceholders так же, как и текст (свойства) представления?