O Spring Cloud Config Server em tradução livre seria algo como: “Servidor de configuração da nuvem Spring”, e é basicamente isso que ele faz. Ele prove uma forma de você ter um “repositório” de configuração para as suas aplicações baseada em Spring Boot.

Só para aplicações que rodem Spring Boot? não, da pra você usar ele para outras aplicações, mas é um caso mais “avançado”. Então, por enquanto, vamos nos limitar as aplicações que usem Spring Boot.
Criando nosso projeto do server
Devemos começar criando nosso projeto pelo site: https://start.spring.io/

No Start Spring IO, você deve escolher que é um Config Server, o Actuator e o Spring Security. Esses são os itens “essenciais”.
Se quiser, pode usar a url abaixo que monta o mesmo projeto.
Projeto criado, download feito. Vamos colocar para rodar.
Configurando o nosso “Config Server“
Nos vamos seguir este manual de configuração: https://cloud.spring.io/spring-cloud-config/reference/html/#_spring_cloud_config_server
Você pode importar o projeto na sua IDE de preferencial. Dá até pra usar o bloco de notas, porque temos muitas poucas configurações.
Devemos começar editando o arquivo:
spring-cloud-config-server/src/main/java/br/com/escovabit/springcloudconfigserver/SpringCloudConfigServerApplication.java
incluindo a anotação @EnableConfigServer e seu import org.springframework.cloud.config.server.EnableConfigServer;;
package br.com.escovabit.springcloudconfigserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @EnableConfigServer @SpringBootApplication public class SpringCloudConfigServerApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConfigServerApplication.class, args); } }
Depois, eu gosto de apagar o arquivo:
spring-cloud-config-server/src/main/resources/application.properties
E no lugar criar o arquivo:
spring-cloud-config-server/src/main/resources/application.yml
Com o conteúdo:
spring: security: user: name: ${config_username} password: ${config_password} cloud: config: server: git: timeout: 10 uri: ${config_git_url} default-label: main ignoreLocalSshSettings: true search-paths: - commons # Permite ter um diretorio chamando commons para ler aquivos de configurações - '{application}' # Permite ler arquivos separados em direotiros para cada aplicação # gerar com o comando: ssh-keygen -m PEM -t rsa -b 4096 privateKey: ${config_private_key}
No Spring Boot, nos arquivos de configuração, tudo o que estiver com ${…} é considerado como variável externa da aplicação. Eu gosto bastante desse modelo de trabalho porque permite configurar a aplicação de acordo com o “ambiente” que ela estiver rodando. Sem precisar recompilar em caso de alteração.
“Build_ando” – Construindo o artefato
Agora, já da pra rodar a aplicação, o que você precisa fazer é compilar ela com o comando:
./gradlew build
Exportando as variáveis de execução
Agora, exporta as variáveis de “ambiente” que definimos no application.yml.
Começando com usuário e senha que será utilizado para as aplicações se conectar ao Spring Cloud Config Server.
export config_username=usuariocliente export config_password=senhadoscliente
Depois, a variável que indica a url do nosso repositório de configurações:
export config_git_url=git@github.com:escovabit-tec-br/spring-cloud-config-files.git
e por ultimo, a chave RSA que utilizamos para autenticar no repositório:
export config_private_key=$(cat ~/.ssh/id_rsa)
Essa parte da chave, é a que gera mais dor de cabeça.
A chave precisa ser gerada pelo comando:
ssh-keygen -m PEM -t rsa -b 4096
Se não, o Spring recusa a chave, mesmo que o Git aceite ela. Também tem a questão de como colocar ela com variável.
Não se preocupe se não der certo logo de cara. O próprio Spring coloca dentro do arquivo YML a configuração da chave em sua documentação. De tão “chato” que é fazer isso.
Ref: https://cloud.spring.io/spring-cloud-config/reference/html/#_git_ssh_configuration_using_properties
Rodando a aplicação
para rodar, executar o comando:
java -jar build/libs/spring-cloud-config-server-0.0.1-SNAPSHOT.jar

Com ela no ar, você “testa” fazendo a chamada da url no seu navegador simulando a chamada que uma aplicação faria:
http://localhost:8080/sample-app,shared-config/dev
PS: explicando a url, depois do 8080, o conteúdo separado por vírgula são os nomes dos arquivos existentes (sample-app e shared-config) no repositório e o conteúdo após a barra final (dev) representa qual é o profile de configuração.
Vai aparece a tela de login padrão do Spring Security, basta coloca o usuário e senha que você fez no export.

Após o login, você deve receber a configuração da aplicação que você solicitou na url:

Aqui acaba a parte básica de configuração. Se você quiser, pode olhar no repositório a baixo com a tag basic-config:
https://github.com/escovabit-tec-br/spring-cloud-config-server/tree/basic-config
Vou ir evoluindo esse projeto colocando as outras configurações que são recomendadas para ele. Acompanhe isso nos outros posts.