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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.aprendendo.javaee.microconfighello.rest; | |
import java.util.Optional; | |
import javax.enterprise.context.RequestScoped; | |
import javax.inject.Inject; | |
import javax.ws.rs.GET; | |
import javax.ws.rs.POST; | |
import javax.ws.rs.Path; | |
import javax.ws.rs.PathParam; | |
import org.eclipse.microprofile.config.Config; | |
import org.eclipse.microprofile.config.ConfigProvider; | |
import org.eclipse.microprofile.config.inject.ConfigProperty; | |
@RequestScoped | |
@Path("/config") | |
public class ConfigEndpoint { | |
private static final String PROPERTY_PARAM = "propertyName"; | |
private static final String CUSTOM_PROPERTY = "custom.property"; | |
@Inject | |
@ConfigProperty(name = CUSTOM_PROPERTY, defaultValue = "POST to /config/custom.property to set a new value") | |
String customProperty; | |
@Inject | |
Config config; | |
@GET | |
@Path("/provider") | |
public String providerName() { | |
return "Provider: " + config.getClass().getName(); | |
} | |
@GET | |
@Path(CUSTOM_PROPERTY) | |
public String getProperty() { | |
return customProperty; | |
} | |
@GET | |
@Path("{" + PROPERTY_PARAM + "}") | |
public String getProperty(@PathParam(PROPERTY_PARAM) String propertyName) { | |
String result = "Value for property \""+ propertyName + "\" not found"; | |
Optional<String> value = config.getOptionalValue(propertyName, String.class); | |
if(value.isPresent()) { | |
result = propertyName + "=" + value.get(); | |
} | |
return result; | |
} | |
@POST | |
@Path("{" + PROPERTY_PARAM + "}") | |
public void setProperty(@PathParam(PROPERTY_PARAM) String propertyName, String value) { | |
System.out.println("Setting: " + propertyName + "=" + value); | |
System.setProperty(propertyName, value); | |
} | |
} |
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