
Compartilhar:
Diana é defensora de desenvolvedores na Vonage. Ela gosta de comer ostras frescas.
Trabalhando com variáveis de ambiente em Java
Tempo de leitura: 6 minutos
Introdução
Variáveis de ambiente (às vezes chamadas de “env vars”) são variáveis armazenadas fora do seu programa, que podem afetar a forma como ele é executado. Posteriormente, você pode usar esse valor para alterar o comportamento de programas, aplicativos e serviços. As Applications tratam as variáveis de ambiente como valores fixos durante a execução, e não como variáveis mutáveis (um valor que pode mudar). Elas são mais úteis para valores que você normalmente codificaria diretamente, mas que deve manter fora do seu código, seja porque variam entre ambientes ou porque são confidenciais, como chaves de API ou senhas. Isso mantém seu código portátil, mais fácil de gerenciar e protege informações confidenciais em ambientes menos seguros, como os de desenvolvimento ou teste.
Nesta postagem do blog, você aprenderá o que são variáveis de ambiente, por que elas são importantes em aplicações Java, quais são os casos de uso mais comuns e como defini-las e acessá-las em diferentes ambientes.
Pré-requisitos
- Conhecimentos básicos de Java
- Um IDE como o IntelliJ IDEA ou o Eclipse
- Um account na Vonage
Casos de uso
Entre as formas mais comuns de usar variáveis de ambiente estão:
armazenar chaves de API, senhas e tokens com segurança fora do código.
alternar entre as configurações de desenvolvimento, teste, pré-produção e produção.
executar o mesmo código em diferentes máquinas ou contêineres sem alterações.
defina variáveis como
PATHouJAVA_HOME.
Armazenamento de chaves de API, senhas e tokens
Como funciona
Informações confidenciais, como chaves de API, senhas de banco de dados ou tokens de autenticação, podem ser armazenadas em variáveis de ambiente (por exemplo, API_KEY ou DB_PASSWORD).
Benefícios
Manter os segredos fora do código-fonte reduz os riscos de segurança e evita vazamentos acidentais no controle de versão. Isso também facilita a troca de chaves ou senhas, já que basta editar um único arquivo.
Exemplo de implementação
Em Java, uma chave da API da Vonage pode ser armazenada como uma variável de ambiente, como VONAGE_API_KEY. Você acessaria essa chave no código com System.getenv("VONAGE_API_KEY"), garantindo que a chave não fique incorporada diretamente no aplicativo.
Alteração de configurações entre ambientes
Como funciona
Variáveis de ambiente, como ENV_MODE ou APP_ENV, podem indicar se o aplicativo está sendo executado em ambientes de desenvolvimento, teste, pré-produção ou produção.
Benefícios
Isso permite que as aplicações ajustem seu comportamento automaticamente, de acordo com o contexto. Por exemplo, no modo de desenvolvimento, é possível ativar o registro detalhado de logs, enquanto, em produção, esses logs são minimizados para melhorar o desempenho.
Exemplo de implementação
Um aplicativo Java pode verificar System.getenv("ENV_MODE") para selecionar a string de conexão correta com o banco de dados ou para ativar/desativar ferramentas de depuração, dependendo do ambiente.
Executando o mesmo código em diferentes máquinas ou contêineres
Como funciona
Ao manter as variáveis de ambiente fora do código, a mesma base de código pode ser implantada em diferentes máquinas, servidores ou contêineres sem necessidade de modificações.
Benefícios
Isso facilita a migração e o dimensionamento das aplicações, especialmente em ambientes com contêineres, como o Docker ou o Kubernetes, já que basta ajustar os valores das variáveis de ambiente sem precisar alterar o código-fonte.
Exemplo de implementação
Uma aplicação Java em contêiner pode definir variáveis de ambiente para credenciais de banco de dados e URLs de serviços. Independentemente de o contêiner ser executado localmente ou em produção, o mesmo código funciona porque ele lê as informações do ambiente.
Definindo variáveis de caminho
Como funciona
Variáveis de ambiente como PATH ou JAVA_HOME especificam locais no nível do sistema para executáveis, bibliotecas ou ambientes de execução.
Benefícios
Isso permite que ferramentas e applications sejam executados de maneira consistente, sem a necessidade de definir manualmente os caminhos dos arquivos. É particularmente útil ao executar softwares em várias plataformas, cada uma com estruturas de diretórios diferentes.
Exemplo de implementação
Em Java, definir JAVA_HOME garante que o aplicativo sempre saiba onde encontrar o JDK. Ao ler os caminhos a partir das variáveis de ambiente, os desenvolvedores evitam problemas específicos da plataforma e tornam seus aplicativos mais portáteis.
Como usar variáveis de ambiente
Para usar variáveis de ambiente, primeiro é preciso defini-las no sistema ou em um arquivo de configuração e, em seguida, acessar seus valores a partir do aplicativo durante a execução.
Definição de variáveis de ambiente
Como prática recomendada, defina as variáveis de ambiente no seu sistema operacional antes de iniciar seu aplicativo Java. Isso pode ser feito na linha de comando ou diretamente em um arquivo .env.
Definir variáveis de ambiente antes de executar um aplicativo Java
A abordagem mais comum é definir variáveis de ambiente no seu sistema operacional antes de iniciar sua aplicação Java. Isso pode ser feito na linha de comando ou por meio de scripts.
Por exemplo, em um ambiente Unix, é possível definir uma variável de ambiente no terminal da seguinte maneira:
No Prompt de Comando do Windows, seria assim:
set MY_VAR=some value
Conjunto para subprocessos
Se você precisar definir variáveis de ambiente para subprocessos iniciados a partir do seu aplicativo Java (e não para o próprio processo Java), você pode usar a classe ProcessBuilder:
ProcessBuilder processBuilder = new ProcessBuilder();
Map<String, String> env = processBuilder.environment();
env.put("MY_VAR", "some value");
Process process = processBuilder.start();
Definir variáveis de ambiente no IDE
Se você estiver usando um Ambiente de Desenvolvimento Integrado (IDE) como IntelliJ IDEA ou Eclipse, você pode definir variáveis de ambiente nas configurações do seu aplicativo.
Definir variáveis de ambiente nas ferramentas de compilação
Ao usar ferramentas de compilação como Maven ou Gradle, é possível configurar variáveis de ambiente nos scripts de compilação ou nos arquivos de configuração.
Carregando configurações a partir de um arquivo
Como java.util.Properties implementa a interface Map, você pode carregar qualquer arquivo que mapeie pares chave-valor dessa forma, independentemente da extensão do arquivo:
var props = new Properties();
var envFile = Paths.get("/path/to/MyEnvConfig.env");
try (var inputStream = Files.newInputStream(envFile)) {
props.load(inputStream);
}
String apiKey = props.get("VONAGE_API_KEY");
String apiSecret = props.get("VONAGE_API_SECRET"); Como obter variáveis de ambiente
O acesso às variáveis de ambiente em Java é simples e pode ser feito usando a System classe, que é fornecida pela biblioteca padrão do Java. Aqui está um guia simples sobre como fazer isso:
Obter uma única variável de ambiente: Use o System.getenv(String name) método para recuperar o valor de uma variável de ambiente específica. Por exemplo, para acessar uma variável de ambiente chamada API_KEY, você usaria:
String apiKey = System.getenv("API_KEY");Verificar se há valores nulos: É uma boa prática verificar se a variável de ambiente é nula (ou seja, não está definida) para evitar possíveis NullPointerExceptions. Por exemplo:
String apiKey = Optional.ofNullable(System.getenv("API_KEY")).orElse(otherValue);Aqui, otherValue está o valor alternativo. Se você preferir que o sistema pare imediatamente quando a variável de ambiente estiver ausente, pode lançar uma exceção:
Optional.ofNullable(System.getenv("API_KEY")).orElseThrow(() -> new IllegalStateException("API_KEY env var is not defined"));
Obter todas as variáveis de ambiente: Para obter uma Map<String, String> de todas as variáveis de ambiente, use System.getenv(). Isso é útil se você quiser percorrer todas as variáveis de ambiente disponíveis. Por exemplo:
Map<String, String> envVars = System.getenv();
for (String envName : envVars.keySet()) {
System.out.format("%s=%s%n", envName, envVars.get(envName));`
}
Como alternativa, isso pode ser escrito em uma única linha:
System.getenv().forEach((k, v) -> System.out.println(k+"="+v));
Compartilhe suas melhores práticas
Obter e definir variáveis de ambiente é uma parte essencial da criação de software de produção. Se você chegou ao final deste artigo, agora já está familiarizado com o que são variáveis de ambiente, seus casos de uso, como obtê-las e defini-las, e como usar arquivos .env em Java. Sempre valorizamos a participação da comunidade. Fique à vontade para se juntar a nós no GitHub e na Slack da Comunidade Vonage. Você tem outras práticas recomendadas para o uso de variáveis de ambiente? Compartilhe-as e me marque. Adoraria saber mais sobre elas!