Se você já usou o @Value para recuperar informações do application.properties ou application.yaml, talvez esteja na hora de conhecer uma alternativa mais poderosa e robusta: o @ConfigurationProperties.
🧠 Importante:
Embora o exemplo deste post utilize o Redis para fins didáticos, o uso de @ConfigurationProperties é extremamente útil para configurar qualquer componente externo da sua aplicação — como banco de dados, Kafka, RabbitMQ, APIs externas, serviços de autenticação, entre outros.
A ideia principal é separar claramente a responsabilidade das configurações e garantir segurança, legibilidade e fácil manutenção — independentemente do serviço que você estiver integrando.
Por que usar @ConfigurationProperties?
Enquanto o @Value é direto e prático, o @ConfigurationProperties oferece mais segurança, legibilidade e uma forma mais elegante de organizar e validar configurações. Ele permite mapear grupos de propriedades para objetos Java, com suporte a validação e injeção via construtor.
💡 Dica: O @ConfigurationProperties é especialmente útil em configurações mais complexas ou que envolvem múltiplos parâmetros relacionados.
Record vs Class
Para este artigo, optei por usar record no lugar de class, o que elimina a necessidade de escrever getters, setters. Além disso, records são imutáveis por padrão — algo muito desejável quando falamos de configurações.
Exemplo prático com @Value
No exemplo abaixo, temos a classe RedisConfigWithValue, que utiliza o @Value para injetar as propriedades host e port diretamente do application.yaml. Essa abordagem funciona bem para cenários simples.
Melhorando com @ConfigurationProperties
Agora vamos reescrever esse código utilizando @ConfigurationProperties. Primeiro, criamos um record anotado com @ConfigurationProperties, @Validated e validações com Jakarta Validation:

Tornando o record disponível no contexto Spring
Para que o Spring reconheça o RedisProperties, precisamos registrar essa classe como um componente escaneável. Uma forma simples é usar a anotação @EnableConfigurationProperties em uma classe de configuração ou adicionar o @ConfigurationPropertiesScan, neste caso optei por adicioná-lo a classe principal da aplicação.
Injetando o record na classe de configuração
Agora basta injetar o RedisProperties na classe que precisa dessas configurações:
Essa abordagem melhora a legibilidade, a separação de responsabilidades e a segurança da aplicação. E o melhor: qualquer nova propriedade adicionada no RedisProperties
estará automaticamente disponível onde ele for injetado.
Validação na inicialização da aplicação
Vamos deixar o host e port vazios no application.yaml e observar o que acontece:
Resultado? A aplicação falha ao iniciar, e ainda informa exatamente o que está faltando:
Isso evita erros em tempo de execução e facilita o diagnóstico durante o desenvolvimento.
Conclusão
Será que vale a pena usar o @ConfigurationProperties? Na minha opinião, vale muito a pena. Além de tornar o código mais limpo e organizado, ele contribui para uma aplicação mais robusta e de fácil manutenção.
E você, ainda prefere usar @Value no seu projeto? Compartilhe nos comentários sua experiência e dúvidas!
🚀 Quer ir além? 🚀
Se esse artigo te ajudou, imagina o tanto de coisa bacana que te espera no canal BoraPraticar!
🎥 Lá tem muito conteúdo prático pra quem quer aprender, se atualizar e crescer de verdade na carreira.
👉 youtube.com/@maddytec/videos
☕ Me paga um café?
Se curtiu o conteúdo e quer me dar aquela moral, escaneia aí e me paga um cafezinho pra eu continuar compartilhando conhecimento de forma leve e prática com você 😄
Valeu demais pela força! 🙌