
Servidor de configuração centralizado para sistemas distribuídos com API HTTP, criptografia/descriptografia de propriedades e suporte para backends Git, Vault, JDBC e sistema de arquivos local.
NÃO EDITE ESTE ARQUIVO. ELE FOI GERADO. Alterações manuais neste arquivo serão perdidas quando ele for gerado novamente. Edite os arquivos no diretório src/main/asciidoc/ em vez disso.
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
Spring Cloud Config fornece suporte do lado do servidor e do lado do cliente para configuração externalizada em um sistema distribuído. Com o Config Server, você tem um local central para gerenciar propriedades externas para aplicações em todos os ambientes.
Os conceitos tanto no cliente quanto no servidor mapeiam de forma idêntica para as abstrações Spring Environment e PropertySource, portanto, eles se encaixam muito bem com aplicações Spring, mas podem ser usados com qualquer aplicação executada em qualquer linguagem.
À medida que uma aplicação avança pelo pipeline de implantação, do desenvolvimento para o teste e para a produção, você pode gerenciar a configuração entre esses ambientes e ter certeza de que as aplicações têm tudo de que precisam para serem executadas quando migrarem.
A implementação padrão do backend de armazenamento do servidor usa git, portanto, suporta facilmente versões etiquetadas de ambientes de configuração, além de ser acessível a uma ampla variedade de ferramentas para gerenciar o conteúdo.
É fácil adicionar implementações alternativas e conectá-las com a configuração Spring.
== Recursos
=== Spring Cloud Config Server
Spring Cloud Config Server oferece os seguintes benefícios:
@EnableConfigServer=== Spring Cloud Config Client
Especificamente para aplicações Spring, o Spring Cloud Config Client permite que você:
Environment com sources de propriedade remotos.@RefreshScope para @Beans Spring que desejam ser reinicializados quando a configuração mudar./env para atualizar o Environment e religar @ConfigurationProperties e níveis de log.
** /refresh para atualizar os beans @RefreshScope.
** /restart para reiniciar o contexto Spring (desabilitado por padrão).
** /pause e /resume para chamar os métodos Lifecycle (stop() e no ).== Início Rápido
Este início rápido percorre o uso tanto do servidor quanto do cliente do Spring Cloud Config Server.
Primeiro, inicie o servidor, da seguinte forma:
O servidor é uma aplicação Spring Boot, então você pode executá-lo a partir da sua IDE se preferir (a classe principal é ConfigServerApplication).
Em seguida, experimente um cliente, da seguinte forma:
A estratégia padrão para localizar sources de propriedade é clonar um repositório git (em spring.cloud.config.server.git.uri) e usá-lo para inicializar um mini SpringApplication.
A Environment da mini-aplicação é usada para enumerar sources de propriedade e publicá-las em um endpoint JSON.
O serviço HTTP possui recursos na seguinte forma:
onde application é injetado como spring.config.name no SpringApplication (o que normalmente é application em uma aplicação Spring Boot comum), profile é um perfil ativo (ou lista separada por vírgulas de propriedades), e label é uma etiqueta git opcional (padrão é master.)
Spring Cloud Config Server obtém configuração para clientes remotos de várias fontes. O exemplo a seguir obtém configuração de um repositório git (que deve ser fornecido), conforme mostrado no exemplo a seguir:
Outras fontes são qualquer banco de dados compatível com JDBC, Subversion, Hashicorp Vault, Credhub e sistemas de arquivos locais.
=== Uso do Lado do Cliente
Para usar esses recursos em uma aplicação, você pode construí-la como uma aplicação Spring Boot que depende de spring-cloud-config-client (para um exemplo, veja os casos de teste para o config-client ou a aplicação de exemplo).
A maneira mais conveniente de adicionar a dependência é com um starter Spring Boot org.springframework.cloud:spring-cloud-starter-config.
Há também um parent pom e BOM (spring-cloud-starter-parent) para usuários Maven e um arquivo de propriedades de gerenciamento de versão Spring IO para usuários Gradle e Spring CLI. O exemplo a seguir mostra uma configuração típica Maven:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>{spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
Agora você pode criar uma aplicação Spring Boot padrão, como o seguinte servidor HTTP:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Quando este servidor HTTP é executado, ele pega a configuração externa do servidor de configuração local padrão (se estiver em execução) na porta 8888.
Para modificar o comportamento de inicialização, você pode alterar a localização do servidor de configuração usando bootstrap.properties (semelhante a application.properties mas para a fase de bootstrap de um contexto de aplicação), conforme mostrado no exemplo a seguir:
Por padrão, se nenhum nome de aplicação for definido, application será usado. Para modificar o nome, a seguinte propriedade pode ser adicionada ao arquivo bootstrap.properties:
NOTA: Ao definir a propriedade ${spring.application.name}, não prefixe o nome da sua aplicação com a palavra reservada application- para evitar problemas ao resolver a source de propriedade correta.
As propriedades bootstrap aparecem no endpoint /env como uma source de propriedade de alta prioridade, conforme mostrado no exemplo a seguir.
Uma source de propriedade chamada ```configService:<URL do repositório remoto>/contém a propriedadefoocom um valor debar` e é a de maior prioridade.
NOTA: A URL no nome da source de propriedade é o repositório git, não a URL do servidor de configuração.
=== Aplicação de Exemplo
Você pode encontrar uma aplicação de exemplo https://github.com/spring-cloud/spring-cloud-config/tree/master/spring-cloud-config-sample[aqui].
É uma aplicação Spring Boot, então você pode executá-la usando os mecanismos habituais (por exemplo, mvn spring-boot:run).
Quando executada, ela procura o servidor de configuração em http://localhost:8888 (um padrão configurável), então você também pode executar o servidor para ver tudo funcionando em conjunto.
O exemplo tem um caso de teste onde o servidor de configuração também é iniciado na mesma JVM (com uma porta diferente), e o teste afirma que uma propriedade de ambiente do repositório de configuração git está presente.
Para alterar a localização do servidor de configuração, você pode definir spring.cloud.config.uri em bootstrap.yml (ou em propriedades do sistema e outros lugares).
O caso de teste tem um método main() que executa o servidor da mesma forma (veja os logs para sua porta), então você pode executar todo o sistema em um processo e brincar com ele (por exemplo, você pode executar o método main() em sua IDE).
O método main() usa target/config como diretório de trabalho do repositório git, então você pode fazer alterações locais lá e vê-las refletidas na aplicação em execução. O exemplo a seguir mostra uma sessão de ajustes com o caso de teste:
O endpoint refresh relata que a propriedade "sample" mudou.
== Construção
:jdkversion: 1.7
=== Compilação e Teste Básicos
Para construir o código-fonte, você precisará instalar o JDK {jdkversion}.
Spring Cloud usa Maven para a maioria das atividades relacionadas à construção, e você deve conseguir começar rapidamente clonando o projeto em que está interessado e digitando
NOTA: Você também pode instalar o Maven (>=3.3.3) por conta própria e executar o comando mvn
no lugar de ./mvnw nos exemplos abaixo. Se fizer isso, também
poderá precisar adicionar -P spring se suas configurações locais do Maven não
contiverem declarações de repositório para artefatos de pré-lançamento do spring.
NOTA: Esteja ciente de que você pode precisar aumentar a quantidade de memória
disponível para o Maven definindo uma variável de ambiente MAVEN_OPTS com
um valor como -Xmx512m -XX:MaxPermSize=128m. Tentamos cobrir isso na
configuração .mvn, então, se você achar que precisa fazer isso para que uma
construção seja bem-sucedida, por favor, abra um ticket para que as configurações sejam adicionadas ao
controle de versão.
Para dicas sobre como construir o projeto, veja em .travis.yml se houver
um. Deve haver um comando "script" e talvez "install". Também
veja na seção "services" se algum serviço precisa estar
executando localmente (por exemplo, mongo ou rabbit). Ignore as partes relacionadas ao git
que você pode encontrar em "before_install", pois estão relacionadas à configuração de credenciais
git e você já as possui.
Os projetos que exigem middleware geralmente incluem um
docker-compose.yml, então considere usar
https://docs.docker.com/compose/[Docker Compose] para executar os servidores de middleware
em contêineres Docker. Consulte o README no
https://github.com/spring-cloud-samples/scripts[repositório de scripts de demonstração]
para obter instruções específicas sobre os casos comuns de mongo,
rabbit e redis.
NOTA: Se tudo mais falhar, construa com o comando de .travis.yml (normalmente
./mvnw install).
=== Documentação
O módulo spring-cloud-build tem um perfil "docs", e se você ativá-lo,
ele tentará construir fontes asciidoc a partir de
src/main/asciidoc. Como parte desse processo, ele procurará um
README.adoc e o processará carregando todas as inclusões, mas não
o analisará ou renderizará, apenas o copiará para ${main.basedir}
(padrão é ${basedir}, ou seja, a raiz do projeto). Se houver
quaisquer alterações no README, elas aparecerão após uma construção Maven como
um arquivo modificado no lugar correto. Basta confirmá-lo e enviar a alteração.
=== Trabalhando com o código Se você não tiver preferência por IDE, recomendamos que use https://www.springsource.com/developer/sts[Spring Tools Suite] ou https://eclipse.org[Eclipse] ao trabalhar com o código. Usamos o https://eclipse.org/m2e/[m2eclipse] plugin eclipse para suporte Maven. Outras IDEs e ferramentas também devem funcionar sem problemas, desde que usem Maven 3.3.3 ou superior.
==== Importando para eclipse com m2eclipse Recomendamos o https://eclipse.org/m2e/[m2eclipse] plugin eclipse ao trabalhar com eclipse. Se você ainda não tiver o m2eclipse instalado, ele está disponível no "eclipse marketplace".
NOTA: Versões mais antigas do m2e não suportam Maven 3.3, então, uma vez que os
projetos sejam importados para o Eclipse, você também precisará informar ao
m2eclipse para usar o perfil correto para os projetos. Se você vir
muitos erros diferentes relacionados aos POMs nos projetos, verifique
se você tem uma instalação atualizada. Se não puder atualizar o m2e,
adicione o perfil "spring" ao seu settings.xml. Alternativamente, você pode
copiar as configurações do repositório do perfil "spring" do pom pai
para o seu settings.xml.
==== Importando para eclipse sem m2eclipse Se preferir não usar o m2eclipse, você pode gerar metadados de projeto eclipse usando o seguinte comando:
$ ./mvnw eclipse:eclipse
Os projetos eclipse gerados podem ser importados selecionando import existing projects
no menu file.
=== JCE
Se você receber uma exceção devido a "Illegal key size" e estiver usando o JDK da Sun, precisará instalar os Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files. Veja os seguintes links para mais informações:
https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html[Java 6 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html[Java 7 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html[Java 8 JCE]
Extraia os arquivos JCE na pasta JDK/jre/lib/security para a versão de JRE/JDK x64/x86 que você usa.
== Contribuindo
:spring-cloud-build-branch: master
Spring Cloud é lançado sob a licença Apache 2.0 não restritiva, e segue um processo de desenvolvimento Github muito padrão, usando o rastreador Github para issues e mesclando pull requests no master. Se você quiser contribuir, mesmo que algo trivial, por favor, não hesite, mas siga as diretrizes abaixo.
=== Assine o Contrato de Licença do Contribuidor Antes de aceitarmos um patch ou pull request não trivial, precisaremos que você assine o https://cla.pivotal.io/sign/spring[Contributor License Agreement]. Assinar o contrato do contribuidor não concede a ninguém direitos de commit no repositório principal, mas significa que podemos aceitar suas contribuições, e você receberá um crédito de autor se o fizermos. Contribuidores ativos podem ser convidados a se juntar à equipe principal, e receber a capacidade de mesclar pull requests.
=== Código de Conduta Este projeto adere ao https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[código de conduta] do Contributor Covenant. Ao participar, você deve manter este código. Por favor, reporte comportamento inaceitável para [email protected].
=== Convenções de Código e Tarefas Domésticas Nenhuma dessas é essencial para um pull request, mas todas ajudarão. Elas também podem ser adicionadas após o pull request original, mas antes de uma mesclagem.
eclipse-code-formatter.xml do
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
Cloud Build] projeto. Se estiver usando IntelliJ, você pode usar o
https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
Plugin] para importar o mesmo arquivo..java tenham um comentário de classe Javadoc simples com pelo menos uma
tag @author identificando você, e de preferência pelo menos um parágrafo sobre o que a classe serve..java (copie de arquivos existentes
no projeto)@author nos arquivos .java que você modificar substancialmente (mais
do que alterações cosméticas).Fixes gh-XXXX no final da mensagem
de commit (onde XXXX é o número da issue).=== Checkstyle
Spring Cloud Build vem com um conjunto de regras checkstyle. Você pode encontrá-las no módulo spring-cloud-build-tools. Os arquivos mais notáveis sob o módulo são:
<1> Regras padrão do Checkstyle <2> Configuração do cabeçalho do arquivo <3> Regras de supressão padrão
==== Configuração do Checkstyle
As regras do Checkstyle estão desabilitadas por padrão. Para adicionar checkstyle ao seu projeto, basta definir as seguintes propriedades e plugins.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
${project.root}/src/checkstyle/checkstyle-suppressions.xml com suas supressões. Exemplo:.projectRoot/src/checkstyle/checkstyle-suppresions.xmlÉ aconselhável copiar ${spring-cloud-build.rootFolder}/.editorconfig e ${spring-cloud-build.rootFolder}/.springformat para o seu projeto. Dessa forma, algumas regras de formatação padrão serão aplicadas. Você pode fazer isso executando este script:```bash
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== Configuração do IDE
==== Intellij IDEA
Para configurar o Intellij, deve importar as nossas convenções de codificação, perfis de inspeção e configurar o plugin Checkstyle.
Os seguintes ficheiros podem ser encontrados no projeto https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build].
.spring-cloud-build-tools/
----
└── src
├── checkstyle
│ └── checkstyle-suppressions.xml <3>
└── main
└── resources
├── checkstyle-header.txt <2>
├── checkstyle.xml <1>
└── intellij
├── Intellij_Project_Defaults.xml <4>
└── Intellij_Spring_Boot_Java_Conventions.xml <5>
----
<1> Regras Checkstyle predefinidas
<2> Configuração do cabeçalho de ficheiro
<3> Regras de supressão predefinidas
<4> Predefinições de projeto para Intellij que aplicam a maioria das regras Checkstyle
<5> Convenções de estilo de projeto para Intellij que aplicam a maioria das regras Checkstyle
.Estilo de código
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-code-style.png[Code style]
Vá a `File` -> `Settings` -> `Editor` -> `Code style`. Aí, clique no ícone junto à secção `Scheme`. Depois, clique no valor `Import Scheme` e escolha a opção `Intellij IDEA code style XML`. Importe o ficheiro `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml`.
.Perfis de inspeção
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-inspections.png[Code style]
Vá a `File` -> `Settings` -> `Editor` -> `Inspections`. Aí, clique no ícone junto à secção `Profile`. Depois, clique em `Import Profile` e importe o ficheiro `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml`.
.Checkstyle
Para que o Intellij funcione com o Checkstyle, tem de instalar o plugin `Checkstyle`. É aconselhável instalar também o `Assertions2Assertj` para converter automaticamente as asserções JUnit.
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-checkstyle.png[Checkstyle]
Vá a `File` -> `Settings` -> `Other settings` -> `Checkstyle`. Aí, clique no ícone `+` na secção `Configuration file`. Depois, terá de definir de onde as regras Checkstyle devem ser obtidas. Na imagem acima, escolhemos as regras do repositório Spring Cloud Build clonado. No entanto, pode apontar para o repositório GitHub do Spring Cloud Build (por exemplo, para o `checkstyle.xml`: `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml`). É necessário fornecer as seguintes variáveis:
- `checkstyle.header.file` – aponte para o ficheiro `spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` do Spring Cloud Build, quer no seu repositório clonado, quer através do URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt`.
- `checkstyle.suppressions.file` – supressões predefinidas. Aponte para o ficheiro `spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` do Spring Cloud Build, quer no seu repositório clonado, quer através do URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml`.
- `checkstyle.additional.suppressions.file` – esta variável corresponde a supressões no seu projeto local. Por exemplo, se estiver a trabalhar no `spring-cloud-contract`. Aponte para a pasta `project-root/src/checkstyle/checkstyle-suppressions.xml`. Exemplo para `spring-cloud-contract`: `/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml`.
IMPORTANTE: Lembre-se de definir o `Scan Scope` para `All sources`, uma vez que aplicamos as regras Checkstyle para fontes de produção e de teste.
start()ApplicationContext