Я настроил сервер Spring Cloud Config следующим образом:
@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
Теперь самое сложное заключается в том, что некоторые свойства содержат переменные среды. Свойства в 'global/application-production.properties' настроены следующим образом:
test=${DOCKER_HOST}
Когда я запускаю Config Server - все работает нормально. Однако при доступе к 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
Весенняя документация говорит:
Представления YAML и свойств имеют дополнительный флаг (предоставленный как логический параметр запроса resolvePlaceholders), чтобы сигнализировать о том, что заполнители в исходных документах в стандартной форме Spring ${…} должны быть разрешены в выходных данных, где это возможно, до рендеринга. Это полезная функция для потребителей, которые не знают о соглашениях заполнителей Spring.
По какой-то причине resolvePlaceholders не работает для представления JSON, поэтому клиенты конфигурации сервера должны знать обо всех переменных ENV, настроенных на сервере.
Можно ли заставить представление JSON resolvePlaceholders так же, как представление простого текста (свойств)?