Servidor de configuração da nuvem da primavera. Variáveis de ambiente nas propriedades
Eu configurei o servidor Spring Cloud Config assim:
@SpringBootApplication
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
Estou usando o perfil 'nativo' para que as propriedades sejam selecionadas no sistema de arquivos:
server.port=8888
spring.profiles.active=native
spring.cloud.config.server.native.search-locations: classpath:/global
Agora, a parte complicada é que algumas propriedades contêmvariáveis ambientais. As propriedades em 'global / application-production.properties' são configuradas da seguinte maneira:
test=${DOCKER_HOST}
Quando inicio o Config Server - tudo funciona bem. No entanto, quando eu acessohttp: // localhost: 8888 / testapp / production Eu vejo isso:
{
name: "testapp",
profiles: [
"production"
],
label: null,
version: null,
propertySources: [
{
name: "classpath:/global/application-production.properties",
source: {
test: "${DOCKER_HOST}"
}
}
]
}
Portanto, o valor da variável ENV não está substituindo a venda $ {DOCKER_HOST}, mas sim retornada.
Mas se eu acessarhttp: // localhost: 8888 / application-production.properties o resultado é não JSON, mas texto simples:
test: tcp://192.168.99.100:2376
A documentação do Spring diz:
As representações YAML e properties têm um sinalizador adicional (fornecido como um parâmetro de consulta booleano resolvePlaceholders) para sinalizar que os espaços reservados nos documentos de origem, no formato padrão Spring $ {…}, devem ser resolvidos na saída sempre que possível antes da renderização. Esse é um recurso útil para consumidores que não conhecem as convenções de espaço reservado do Spring.
Por algum motivoresolvePlaceholders não está funcionando para a representação JSON, portanto, os clientes de configuração do servidor precisam estar cientes de todas as variáveis ENV configuradas no servidor.
É possível forçar a representação JSONresolvePlaceholders mesma maneira que a representação de texto sem formatação (propriedades)?