segunda-feira, 18 de dezembro de 2017

MicroProfile Config: Um padrão para acesso a propriedades em sua aplicação

Para acessar propriedades hoje precisamos criar nosso próprio meio usando propriedades do sistema ou criar Producer CDI para ler um arquivo ou outra fonte. O MicroProfile Config facilita o acesso a configurações e cria um padrão para ser usado em aplicações que seguem a especificação MicroProfile ou mesmo qualquer aplicação Java. Vamos mostrar nesse breve artigo como funciona.


Como acessar a configuração com MicroProfile Config?


Com MicroProfileConfig você pode acessar a configuração:


  • Com código Java: Não precisa de API adicional, simplesmente use o seguinte código:
Optional<String> value = ConfigProvider.getConfig().getOptionalValue(propertyName, String.class);

ou

String value = ConfigProvider.getConfig().getValue(propertyName, String.class);

  • Usando CDI e a anotação @ConfigProperty: Se sua aplicação já tem CDI você pode então injetar qualquer propriedade que será convertida para o tipo alvo (incluindo objetos customizados). Você pode configurar um valor padrão para a propriedade;
  • Usando CDI e injetando o objeto Config: Com o objeto Config você tem acessa as configurações também.


Qual a origem da configuração?


Cada fonte de configuração tem um prioridade, a fonte com maior prioridade toma procedência caso haja conflito (mesma propriedade definida em duas fontes diferentes. As configurações podem vir (por padrão) de:

  • Uma propriedade de sistema: São aquelas que modificamos com System.setProperty ou quando iniciamos a aplicação passando o parâmetro -Dpropriedade=valor . Prioridade é 400;
  • Propriedades de System.env: Tem prioridade 300.
  • Propriedades do arquivo META-INF/microprofile-config.properties: Esse é o arquivo padrão lido para se acessar valores de propriedades;
Há também a possibilidade de criar sua propria fonte de armazenamento de propriedade que pode ser qualquer coisa que possa ser acessível do código java: um arquivo, um banco de dados, um web service e mais.

Exemplo


Vamos mostrar agora um exemplo muito simples de um Web Service que tem uma configuração injetada e que permite ler qualquer configuração. A configuração é bem simples, você pode baixar um aplicação de exemplo no site do wildfly swarm que tenha a dependência MicroProfile e começar a codar. 

Gerando um projeto Wildfly Swarm


Só um aviso sobre a versão, usem a versão version.wildfly.swarm como 2017.12.1 ou mais nova. Você já poderá rodar seu código usando mvn clean package wildfly-swarm:run. No nosso caso temos um único Web Service que mostra:

1. Como injetar uma propriedade
2. Como injetar o objeto Config e pegar propriedades dele.

Veja abaixo o código do nosso Web Service:


O código completo poderá ser encontrado no github desse blog.
Veja abaixo o resultado de cada método do Web Service:

Interagindo com a API de configuração usando HTTP


Conclusão


Vimos como essa nova especificação funciona e os conceitos básicos. Há pontos mais avançados a serem estudados, como o uso de Converter e uma fonte de propriedades customizável, mas vamos deixar isso mais para frente. No próximo post falamos sobre alguma das outras especificações parte do MicroProfile. Até mais!


Nenhum comentário:

Postar um comentário