https://a.storyblok.com/f/270183/1368x665/7d47494bfb/java_environmental-variables_24.png

Trabajar con variables de entorno en Java

Tiempo de lectura: 6 minutos

Introducción

Las variables de entorno (a veces llamadas "env vars") son variables que almacenas fuera de tu programa y que pueden afectar a su ejecución. Posteriormente, puede utilizar ese valor para cambiar el comportamiento de programas, aplicaciones y servicios. Applications tratan las variables de entorno como valores fijos durante la ejecución en lugar de variables mutables (un valor que puede cambiar). Son muy útiles para los valores que normalmente codificarías pero que deberías mantener fuera de tu código, ya sea porque cambian entre entornos o porque son sensibles, como las claves API o las contraseñas. Esto hace que el código sea portátil, más fácil de gestionar y protege los secretos en entornos menos seguros, como los de desarrollo o pruebas.

En esta entrada de blog, aprenderá qué son las variables de entorno, por qué son importantes en las aplicaciones Java, casos de uso comunes y cómo establecerlas y acceder a ellas en diferentes entornos.

Requisitos previos

- Conocimientos básicos de Java

- Un IDE como IntelliJ IDEA o Eclipse

- Una Account de Vonage

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Casos prácticos

Las formas más comunes de utilizar las variables de entorno incluyen:

  • almacenar claves de API, contraseñas y tokens de forma segura fuera del código.

  • cambiar configuraciones entre desarrollo, pruebas, staging y producción.

  • ejecutar el mismo código en distintas máquinas o contenedores sin cambios.

  • definir variables como PATH o JAVA_HOME.

Almacenamiento de claves de API, contraseñas y tokens

Cómo funciona

La información confidencial, como las claves API, las contraseñas de bases de datos o los tokens de autenticación, puede almacenarse en variables de entorno (por ejemplo, API_KEY o DB_PASSWORD).

Beneficios

Mantener los secretos fuera del código fuente reduce los riesgos de seguridad y evita filtraciones accidentales en el control de versiones. También facilita la rotación de claves o contraseñas, ya que basta con editar un único archivo.

Ejemplo de aplicación

En Java, una clave de API de Vonage puede almacenarse como una variable de entorno, como por ejemplo VONAGE_API_KEY. Podrías acceder a ella en código con System.getenv("VONAGE_API_KEY")asegurándote de que la clave no esté incrustada directamente en la aplicación.

Cambio de configuraciones entre entornos

Cómo funciona

Las variables de entorno, como ENV_MODE o APP_ENV, pueden indicar si la aplicación se está ejecutando en entornos de desarrollo, pruebas, preparación o producción.

Beneficios

Esto permite a las Applications ajustar automáticamente su comportamiento en función del contexto. Por ejemplo, en el modo de desarrollo, puede activar el registro detallado, mientras que en la producción, los registros se reducen al mínimo para el rendimiento.

Ejemplo de aplicación

Una aplicación Java podría comprobar System.getenv("ENV_MODE") para elegir la cadena de conexión a la base de datos correcta o para activar/desactivar las herramientas de depuración en función del entorno.

Ejecución del mismo código en varias máquinas o contenedores

Cómo funciona

Al mantener las variables de entorno fuera del código, el mismo código base puede desplegarse en diferentes máquinas, servidores o contenedores sin modificaciones.

Beneficios

Esto hace que las aplicaciones sean más fáciles de mover y escalar, especialmente en configuraciones en contenedores como Docker o Kubernetes, ya que solo es necesario ajustar los valores de las variables de entorno sin tocar el código fuente.

Ejemplo de aplicación

Una aplicación Java en contenedor puede definir variables de entorno para credenciales de bases de datos y URL de servicios. Independientemente de si el contenedor se ejecuta localmente o en producción, el mismo código funciona porque lee del entorno.

Definición de variables de ruta

Cómo funciona

Las variables de entorno como PATH o JAVA_HOME especifican ubicaciones a nivel de sistema para ejecutables, bibliotecas o entornos de ejecución.

Beneficios

Esto permite que las herramientas y aplicaciones se ejecuten de forma coherente sin necesidad de codificar la ubicación de los archivos. Resulta especialmente útil cuando se ejecuta software en varias plataformas, cada una con una estructura de directorios diferente.

Ejemplo de aplicación

En Java, configurar JAVA_HOME se asegura de que la aplicación siempre sepa dónde encontrar el JDK. Al leer las rutas desde las variables de entorno, los desarrolladores evitan problemas específicos de la plataforma y hacen que sus aplicaciones sean más portables.

Cómo utilizar las variables de entorno

Para utilizar variables de entorno, primero hay que definirlas en el sistema o en un archivo de configuración y, a continuación, acceder a sus valores desde la aplicación en tiempo de ejecución.

Configuración de variables de entorno

Como práctica recomendada, establezca variables de entorno en su sistema operativo antes de de iniciar su aplicación Java. Esto se puede hacer en la línea de comandos o directamente dentro de un archivo .env.

Establecer variables de entorno antes de ejecutar una aplicación Java

Lo más habitual es establecer variables de entorno en el sistema operativo antes de iniciar la aplicación Java. Esto puede hacerse en la línea de comandos o mediante scripts.

Por ejemplo, en un entorno Unix, puede establecer una variable de entorno en el terminal de la siguiente manera:

export MY_VAR="some value"

En el símbolo del sistema de Windows, sería:

set MY_VAR=some value

Set para Subprocesos

Si necesita establecer variables de entorno para subprocesos iniciados desde su aplicación Java (y no para el propio proceso Java), puede utilizar la clase ProcessBuilder:

ProcessBuilder processBuilder = new ProcessBuilder();
Map<String, String> env = processBuilder.environment();
env.put("MY_VAR", "some value");
Process process = processBuilder.start();

Establecer variables de entorno en el IDE

Si utiliza un entorno de desarrollo integrado (IDE) como IntelliJ IDEA o Eclipsepuede establecer variables de entorno en los ajustes de configuración de su aplicación.

Establecimiento de variables de entorno en las herramientas de compilación

Al utilizar herramientas de compilación como Maven o Gradlepuedes configurar variables de entorno en los scripts de compilación o en los archivos de configuración.

Cargar configuraciones desde un archivo

Dado que java.util.Properties implementa la interfaz Map, puede cargar cualquier archivo que asigne pares clave-valor, independientemente de su extensión:

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");

Obtención de variables de entorno

Acceder a las variables de entorno en Java es sencillo y puede hacerse utilizando la clase System que proporciona la biblioteca estándar de Java. He aquí una guía sencilla sobre cómo hacerlo:

Obtener una única variable de entorno: Utilice el método System.getenv(String name) para recuperar el valor de una variable de entorno específica. Por ejemplo, para acceder a una variable de entorno llamada API_KEYutilizarías

String apiKey = System.getenv("API_KEY");

Comprobación de valores nulos: Es una buena práctica comprobar si la variable de entorno es nula (es decir, no está definida) para evitar posibles errores. NullPointerExceptions. Por ejemplo:

String apiKey = Optional.ofNullable(System.getenv("API_KEY")).orElse(otherValue);

Aquí otherValue es el valor alternativo. Si prefieres fallar rápidamente cuando falta la variable de entorno, puedes lanzar una excepción en su lugar:

Optional.ofNullable(System.getenv("API_KEY")).orElseThrow(() -> new IllegalStateException("API_KEY env var is not defined"));

Obtener todas las variables de entorno: Para obtener una Map<String, String> de todas las variables de entorno, utilice System.getenv(). Esto es útil si desea iterar sobre todas las variables de entorno disponibles. Por ejemplo:

Map<String, String> envVars = System.getenv();
for (String envName : envVars.keySet()) {
    System.out.format("%s=%s%n", envName, envVars.get(envName));`
}

También puede escribirse en una sola línea:

System.getenv().forEach((k, v) -> System.out.println(k+"="+v));

Comparta sus mejores prácticas

Obtener y establecer variables de entorno es una parte esencial de la creación de software de producción. Si has llegado al final de este artículo, ahora estás familiarizado con lo que son las variables de entorno, casos de uso, cómo obtener y establecer variables de entorno, y el uso de archivos .env en Java. Siempre agradecemos la participación de la comunidad. No dudes en unirte a nosotros en GitHub y en Slack de la comunidad de Vonage. ¿Tienes otras prácticas recomendadas para el uso de variables de entorno? Compártelas y etiquétame. Me encantaría conocerlas.

Compartir:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamDefensor del Desarrollador

Diana es desarrolladora de Vonage. Le gusta comer ostras frescas.