2008-10-17 16 views
21

¿Existe un Java equivalente a .NET App.Config?Java equivalente a app.config?

¿De no ser así, existe una forma estándar de mantener la configuración de la aplicación, de modo que puedan cambiarse después de distribuirla?

Respuesta

16

Para WebApps, web.xml se puede usar para almacenar configuraciones de aplicaciones.

Aparte de eso, puede usar la clase Properties para leer y escribir archivos de propiedades.

Es posible que también desee consultar la clase Preferences, que se utiliza para leer y escribir las preferencias del sistema y del usuario. Es una clase abstracta, pero puede obtener objetos apropiados usando userNodeForPackage(ClassName.class) y systemNodeForPackage(ClassName.class).

+0

¿Puede dar más información sobre la primera opción: "web.xml se puede usar para almacenar la configuración de la aplicación"? ¿Está sugiriendo almacenar la configuración de la aplicación como 'context-param's? ¿O algo más? – theyuv

+0

Hay algunos tipos diferentes de params que puede poner en web.xml, pero probablemente quise decir 'context-param'. No recuerdo, ya que han pasado 7,5 años desde entonces. – Powerlord

2

La manera simple es simplemente tener un archivo de propiedades, por ejemplo, myapp.properties, con todas sus configuraciones. No es una forma muy avanzada de hacer ajustes pero es suficiente, o puede tener su propia configuración basada en XML, u obténgalos de una base de datos, etc.

9

Para poner @ sugerencia de Powerlord (1) de utilizar la clase Properties en ejemplo de código:

public class SomeClass { 
    public static void main(String[] args){ 
     String dbUrl = ""; 
     String dbLogin = ""; 
     String dbPassword = "";  
     if (args.length<3) { 
      //If no inputs passed in, look for a configuration file 
      URL configFile = SomeClass.class.getClass().getResource("/Configuration.cnf"); 
      try { 
       InputStream configFileStream = configFile.openStream(); 
       Properties p = new Properties(); 
       p.load(configFileStream); 
       configFileStream.close(); 

       dbUrl  = (String)p.get("dbUrl"); 
       dbLogin = (String)p.get("dbUser"); 
       dbPassword = (String)p.get("dbPassword");    
      } catch (Exception e) { //IO or NullPointer exceptions possible in block above 
       System.out.println("Useful message"); 
       System.exit(1); 
      } 
     } else { 
      //Read required inputs from "args" 
      dbUrl  = args[0]; 
      dbLogin = args[1]; 
      dbPassword = args[2];   
     } 
     //Input checking one three items here 
     //Real work here. 
    } 
} 

A continuación, en la raíz del contenedor (por ejemplo, la parte superior de un archivo JAR) colocar un archivo Configuration.cnf con el siguiente contenido:

#Comments describing the file 
#more comments 
dbUser=username 
dbPassword=password 
dbUrl=jdbc\:mysql\://servername/databasename 

Este sentir no es perfecto (yo estaría interesado en escuchar mejoras) pero lo suficientemente bueno para mis necesidades actuales.

+0

en serio? ¿Entonces ejecutas el lector de flujo sobre el archivo para obtener la configuración? En el caso de clases múltiples, ¿necesitará algo así como una clase de ayuda que pueda usarse en todos lados? ¿Es esta la mejor solución que Java puede ofrecer aquí? Simplemente parece muy ingenuo. – tom33pr

+0

Esto es lo mejor que pude manejar, para mis necesidades, en 2013. Creo que la solución más general generalmente está envuelta en un servidor de aplicaciones. Me viene a la mente la frase "enterprise java beans", aunque nunca he trabajado en ese entorno personalmente. – Pursuit