2010-09-17 14 views
7

Quiero definir una propiedad para un directorio de trabajo (digamos work.dir=/home/username/working-directory), para mi archivo .properties de producción, sin codificar el /home/username.¿Cómo hacer referencia a una propiedad del sistema dentro de un archivo .properties definido por el usuario?

Quiero hacer referencia a la propiedad del sistema user.home en su lugar en el codificado /home/username, para hacer work.dir más genérico.

¿Cómo hago referencia a la propiedad del sistema y la concateno con otras cadenas definidas por el usuario en un .properties definido por el usuario?

Nota: No quiero acceder a la propiedad user.home en mi código java, sino a partir de las .properties que he definido. Quiero poder reemplazar el valor de work.dir con un valor diferente para mi producción y desarrollo (pruebas de JUnit, por ejemplo).

Respuesta

4

Obtenga la propiedad del archivo y luego reemplace las macros compatibles.

String propertyValue = System.getProperty("work.dir"); 
String userHome = System.getProperty("user.home"); 
String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome); 
0

Esta función no está disponible en java.util.Properties. Pero muchas bibliotecas agregan sustitución de variables a las propiedades.

Aquí un ejemplo de lo que está tratando de hacer uso de OWNER API biblioteca (véase el párrafo "importar propiedades"):

public interface SystemPropertiesExample extends Config { 
    @DefaultValue("Welcome: ${user.name}") 
    String welcomeString(); 

    @DefaultValue("${TMPDIR}/tempFile.tmp") 
    File tempFile(); 
} 

SystemPropertiesExample conf = 
     ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv()); 
String welcome = conf.welcomeString(); 
File temp = conf.tempFile(); 
2

Puede administrar sus propiedades con Commons Configuration y utilizar Variable Interpolation

Si usted está familiarizado con Ant o Maven, seguramente ya ha encontrado las variables (como ${token}) que se expanden automáticamente cuando se carga el archivo de configuración. Configuración de los Comunes es compatible con esta característica, así [...]

Esto permitiría a un archivo .properties con

work.dir=${user.home}/working-directory 
Cuestiones relacionadas