2012-09-05 13 views
11

¿Cuál es la mejor práctica para leer los archivos de configuración de su aplicación? Qué carpetas en el servidor Tomcat están "en la ruta de clase".Lectura de propiedades de tomcat

Intenté colocar mi archivo de configuración en el TOMCAT_HOME\conf pero todavía no puedo leerlo de mi servlet.

intentado usar este (hay app.properties archivo en conf):

this.getClass().getClassLoader().getResourceAsStream("/app.properties"); 

no tengo mucho propiedades quizá 10-15 Pensé que esto no será un problema. Recuerdo cuando estaba usando jboss esto no era un problema como este.

En mi aplicación también especifico el resorte de conexión DB en el context.xml ¿puedo especificar mis propiedades allí de alguna manera? ¿O cómo funciona esto con Tomcat?

Me gustaría mantener mis propiedades separadas de mi guerra de guerra/desempaquetada.

actualización

razón de hacer esto es porque no sé donde se desplegará mi aplicación (en qué lugar)

Respuesta

18

Hay muchas maneras diferentes, pero depende de sus necesidades:

Para cargar un archivo de propiedades de $TOMCAT_HOME/conf directorio tendrá que acceder a él mediante un objeto java.io.File desde el cargador de clases (como en this.getClass().getClassLoader().getResourceAsStream(...) es sólo capaz de cargar los archivos (y clases) de su ruta de clase (bajo WEB-INF/classes, WEB-INF/lib o $TOMCAT_HOME/lib)

el ejemplo más fácil de cargar un archivo del directorio de configuración del Tomcat sería:.

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "myconfig.properties"); 
InputStream stream = new FileInputStream(configFile); 
Properties props = new Properties(); 
props.load(stream); 

Tenga en cuenta que este enfoque hará que su código dependa de Tomcat (el mecanismo de carga depende del hecho de que la propiedad del sistema de Tomcat esté disponible). Esto es algo que no recomendaría en absoluto así que si mueve su archivo de propiedad a una carpeta dentro de su classpath entonces debería poder cargarlo como lo intentó y su aplicación podría desplegarse en cualquier contenedor.

Y, podría configurar sus propiedades como recursos JNDI, pero sería demasiado complicado para acceder a ellos.

+0

Esta no es una ubicación donde deberían estar las propiedades de la aplicación. –

+3

Lo sé, pero si él quiere ponerlos allí depende de él, le estoy dando las pistas para obtenerlo y una recomendación para moverlo a una carpeta disponible classpath –

+0

Eso está bien ahora. –

0

Por lo que yo sé puede configurar datasource en Tomcat también. DataSource in Tomcat

Después de esto puede usar datasource en su aplicación.

+0

gracias por la respuesta. No necesito la fuente de datos. Ya tengo esa parte configurada. Necesito propiedades adicionales. –

+0

. Entonces, supongo que lo que sea que esté haciendo está bien. No importa dónde se implemente la aplicación en Tomcat, la estructura del directorio de los archivos extraídos es la misma, por lo que si app.properties se envía correctamente con deployable, no causará ningún problema. –

1

Pon tus archivos en tu aplicación web WEB-INF/classes. Este es el directorio predeterminado de classpath. conf si solo para las partes internas de Tomcat.

0

Aunque podría ser un PITA, probablemente también sea una característica que no sabe dónde se implementará. ¡Entonces no puedes "emparejarte" con ese hecho!

Dependiendo del resto de su pila de Java, la mejor manera es generalmente independiente de Tomcat.Si está utilizando la primavera, se puede decir, por ejemplo:

new ClassPathResource("**/myFile.properties") 

o si el uso de Java Config, otro ejemplo:

@PropertySource("classpath:META-INF/MyWeb.properties") 

En la llanura de Java que se puede decir:

InputStream stream = loader.getResourceAsStream(resourceName); 

donde loader es una instancia de ClassLoader

1

En lugar de hacer referencia a la ubicación de un archivo de configuración en particular, lo haría configuración JNDI-bound, para mantener las aplicaciones dependientes de los datos de configuración y los estándares Java EE solamente. Veo dos opciones:

  1. Si sólo dispone de un número moderado de entradas de configuración en el archivo de propiedades, y luego considerar haciéndolos Environment Entries y accede a ellos a través de JNDI en sus aplicaciones.

  2. O bien, en caso de que desee mantener sus propiedades en un archivo de propiedad separado, también puede crear un bean para representar las propiedades, una fábrica (inicializando el bean usando un archivo de propiedad) y conectarlo a JNDI como Resource Definition.
    Con eso, uno incluso podría volver a leer regularmente el archivo de propiedades sin necesidad de reiniciar las aplicaciones, cambiar entre varias fuentes de configuración u otros requisitos similares.

Cada una de las aplicaciones web usando esta configuración tendrá que incluir un Resource Reference en él es web.xml para referirse a la haba de configuración (o una referencia a cada entrada env. Si se usa la opción 1).

0

añadir el archivo .properties en Apache Tomcat-7.0.78-carpeta \ conf:

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "dashboardiframes.properties"); 
InputStream stream = new FileInputStream(configFile);Properties properties = new Properties(); 
properties.load(stream); 
Cuestiones relacionadas