Spring Boot: Usando Propriedades da Aplicação — Arquivos de Configuração

Marcos Stefani Rosa
4 min readJun 4, 2021

Depois do sucesso do artigo Spring Boot: Usando Propriedades da Aplicação percebi que muitas pessoas me vieram diretamente com dúvidas quanto ao uso efetivamente da propriedade em sua aplicação. Na ocasião eu fiz uma breve explicação do uso utilizando a anotação @Value do Spring Boot, e nesse artigo pretendo falar sobre o uso da aplicação utilizando classes de configuração que serão instanciadas com os valores das propriedades.

Diferente do artigo anterior, estarei utilizando Java e o padrão yml no lugar do properties apenas para fins de apresentação, porém são decisões que optei para apresentar nesse artigo e tudo isso pode ser feito por exemplo em Kotlin e/ou em arquivos yml.

Quando e Porquê usar as classes no lugar da anotação?

Penso que tudo depende da sua necessidade. Para ser sincero, prefiro evitar a anotação @Value pois além da classe facilitar bastante a questão dos testes unitários também evitamos repetição de declaração de variáveis que retornem os mesmos valores. Mas, como eu disse inicialmente, depende da necessidade, eu particularmente estou em um momento que ando preferindo utilizar classes com configurações por sentir que tudo fica muito mais organizado dessa forma.

Hands on:

Para fins de exemplo para este artigo, criaremos um arquivo application.yml para colocarmos as variáveis com valores default das minhas variáveis:

application.yml

Note acima que temos duas propriedades, elas estão no ambiente default do Spring Boot, e caso executemos a aplicação sem definição de ambiente, será aplicado diretamente os valores contidos nesse arquivo.

Agora faremos um segundo arquivo que sobrescreverá o valor de apenas uma das variáveis quando o ambiente for definido, no caso escolhi o ambiente dev, para isso nomearemos nosso arquivo com o complemento “-dev”, vide exemplo abaixo.

Agora, só precisaremos criar um arquivo de configuração que fará a leitura dessas propriedades. Para isso, criaremos um @Bean do tipo @Configuration e acrescentaremos a anotação @ConfigurationProperties que conterá o valor do prefixo. Esse prefixo definirá dentro do aao nome drquivo properties qual é a segmentação que será lida por este arquivo. No nosso exemplo acima a segmentação será some.property, essa forma de leitura nos permite ter vários arquivos separados para cada segmentação.

No exemplo acima, temos duas variáveis string recebendo com o mesmo nome da nossa propriedade, não é impossível utilziar outros tipos como inteiro ou até mesmo uma lista.

Outra informação é importante é relacionada ao nome da variável. Ele deve ser o mesmo que está no arquivo. Porém, quando necessitar alguma variável com nome em camel case, ela pode ser definida no arquivo properties tanto com o próprio camel case ou separado por ífem. (meuExemplo ou meu-exemplo) e no caso, na variável do java definindo como meuExemplo receberá de uma forma ou de outra o conteúdo.

Agora vamos testar nosso código, eu apenas vou colocar um print do conteúdo para exemplificar.

Agora, ao iniciarmos sem definir o profile (ex. mvn spring-boot:run) teremos o seguinte resultado:

Note acima que o profile definido é o default e as informações são as que estão dentro do meu application.yml.

Agora, se rodarmos definindo definindo um profile (ex. mvn spring-boot:run -Dspring-boot.run.arguments=” — spring.profiles.active=dev”) teremos os valores que estão no arquivo application-dev.yml como prioridade na leitura da informação. Então, o que estiver dentro dele será considerado e o que não estiver pegará de application.yml.

Dessa forma, evitamos a utilização do @Value para ler a variável de ambiente e não necessitamos necessariamente carregar as dependencias do Spring para realização de testes.

--

--

Marcos Stefani Rosa

Systems Developer for more than 15 years, postgraduate in Software Engineering with Agile Methods, has relevant experience in Java, Python, JavaScript & others