Acceder a variables de entorno desde Java

De ChuWiki

Veamos como configurar nuestro programa java pasándole propiedades en el arranque, o haciendo que lea variables de entorno de nuestro sistema operativo.


Introducción[editar]

Habitualmente nuestro programa java se arranca desde línea de comando con algo como esto

java -jar nuestro-programa.jar

o bien, en windows

java -cp path1;path2;path3 com.chuidiang.ejemplos.NuestraClaseMain

o en linux (el separador en los path es dos puntos en vez de punto y coma)

java -cp path1:path2:path3 com.chuidiang.ejemplos.NuestraClaseMain

Puedes var más detalles sobre esto en Compilar java desde línea de comandos

Si queremos pasarle algunas propiedades a nuestro programa java, como por ejemplo, el usuario y password de acceso a una base de datos, una dirección IP a la que debe conectarse, etc, hay varias opciones.

Una es meterlas en un fichero de propiedades. En el enlace puedes ver los detalles de cómo hacerlo, así que no hablaremos aquí de ello.

Pasar propiedades en la línea de comandos[editar]

Otra es pasar estas propiedades en la misma línea de comandos, de esta forma

java -Duser=Javier -Dpassword=secreto nuestro-programa.jar

Si las pasamos así, dentro de nuestro programa podemos leerlas usando la el método System.getProperty()

String user = System.getProperty("user");
String password = System.getProperty("password");
     
System.out.println("user = "+user);
System.out.println("password = "+password);

Si queremos pasar esta mismas propiedades en nuestro IDE favorito (eclipse, netbeans, intelliJ IDEA, ...), suele haber alguna ventana donde ponerlas. En el caso de eclipse, botón derecho sobre nuestra clase para sacar el menú y "run as" -> "run configurations...." nos abrirá una ventana, donde en la pestaña "arguments" y en la caja "VM arguments", podemos poner las opciones -D, como se muestra en la imagen

Leer variables de entorno del sistema operativo[editar]

Otra opción es leer variables de entorno del sistema operativo. Aquí tienes un ejemplo en windows de cómo fijar la variable de entorno PATH. El mecanismo es similar para cualquier otra variable de entono que queramos inventar.

Una vez puestas las variables de entorno, es importante arrancar después de haberlas fijado, nuestra ventana de comandos, nuestro IDE, o incluso salir y entrar en sesión. Fijar una variable de entorno no hace que las aplicaciones que ya están abiertas la cojan.

Si se hace desde línea de comandos, en windows, basta con hacer esto

set MI_VARIABLE=Hola!!
java -jar nuestro-programa.jar

o bien, si queremos fijarlas directamente en eclipse, en la misma ventana anterior, pero en la pestaña Environment, podemos hacerlo, como se ve en la siguiente imagen.

En nuestro programa java, para leer las variables de entorno, usaremos el siguiente código

String myVar = System.getenv().get("MI_VARIABLE");
System.out.println("MI_VARIABLE="+myVar);

Un pequeño código para leer e imprimir todas las variables de entorno

Map<String,String> env = System.getenv();
Set<String> keys = env.keySet();
     for (String key: keys){
        System.out.println(key + " = "+env.get(key));
     }

Código completo[editar]

Tienes el código completo de esta clase en Github