2011-07-12 39 views
7

Estoy buscando la mejor manera de utilizar un archivo de propiedades externas con una aplicación que se implementará en el servidor de Weblogic 10.3. Leí varios artículos en el sitio, pero no quiero codificar la ruta al archivo de propiedades ni colocar el archivo en la carpeta dominios/mi dominio.Archivo de propiedades externas con Weblogic

¿Existe una forma dinámica de hacerlo así que cuando se implementa la aplicación, el archivo de propiedades también se instala, por ejemplo, debajo de la carpeta de implementaciones y se lee desde allí?

Muchas gracias

Respuesta

5

Otra alternativa que no requiere poner el archivo en un lugar distinto las solicitudes serán leídos que es usar los archivos genéricos Cargando anulaciones: http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/config.htm#i1066493

Esto implica la creación de un directorio que será el directorio raíz de su despliegue, llamémosle FooApplication que tiene FooApplication.ear y FooWeb.war. Esto se llama Directorio de instalación de la aplicación. Su aplicación se encuentra en el subdirectorio de aplicación/aplicación Foo, ya sea un archivo (como .ear, .war, jar) o si se trata de una versión explosionada de uno de esos archivos. Su plan de implementación opcional (debe tener uno para usar esta característica, podría ser un plan que no haga mucho más allá de especificar un elemento y valores config-root como se describe en la documentación) se incluye en el plan/FooApplication. Puede colocar sus propiedades que desee anular en la aplicación en la estructura de directorios FooApplication/plan/AppFileOverrides. http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/deployunits.htm#sthref9

Una vez realizado ese estilo de despliegue, se escribe código como este desde la aplicación y el contenido de myApp.properties consiguen leídos desde el FooApplication/Plan/AppFileOverrides/FooWeb.war/myApp.properties será el real archivo que se lee adentro.

Properties myAppProps = new Properties(); 
InputStream iostream = 
Thread.currentThread().getContextClassLoader().getResourceAsStream("myCfg/myApp.properties"); 
myAppProps.load(iostream); 

Esto se logra agregando un cargador de clases a su aplicación como se explica en los documentos.Puede parecer tedioso configurarlo inicialmente, pero es una función que satisface directamente la pregunta original y solo para esa aplicación en particular.

1

Enfoque # 1

secuencia de actualización de su puesta en marcha del servidor para pasar por debajo de la variable del sistema de JVM (a continuación es un ejemplo en el sistema operativo Windows)

call "%DOMAIN_HOME%\bin\startWebLogic.cmd" "-Dcom.mycompany.myapp.EXTERNAL_CONFIG_PATH=/mycompany/myapp/config" %* 

uso de esta variable la cual apunta a sus directorios de configuración, lea las configuraciones desde allí. Tendrá que hacer esta configuración en cada servidor donde desee implementar su aplicación.

0

Enfoque # 2

Uso Weblogic biblioteca compartida

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/libraries.html

siga los pasos siguientes

  • Paquete toda la configuración como JAR separada durante el proceso de construcción
  • Implementar configuración J AR como biblioteca compartida
  • de referencia por encima de biblioteca compartida de su oreja/GUERRA
  • Implementar EAR/WAR (Configuraciones estarán disponibles en la ruta de clase)
+0

¿Cómo implementa el JAR de configuración como biblioteca compartida sin conexión usando create properties en wlst/jython? – sloven

1

Cuando dices "Leo varios artículos en el sitio, pero no quiero codificar la ruta al archivo de propiedades" Supongo que estás diciendo que no quieres codificarlo en tu Código Java Si esto es así, entonces por favor ver más abajo

respondida aquí:

Hay maneras de leer el archivo de propiedades en Java de ruta de clase WebLogic

Uno (archivo de propiedades ubicadas en el dominio WebLogic): Caída de las propiedades archivo dentro del directorio del Dominio. De esta forma, el archivo de propiedades se agrega automáticamente a la ruta de clase weblogic y podemos leer desde Java utilizando resourceAsStream.

Dos (archivo de propiedades desde una ubicación definida por el usuario): la ventaja de este enfoque es que el archivo de propiedades puede residir fuera del archivo JAR o EAR y puede modificarse cómodamente.

package com.test; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Properties; 

public class PropertyFileExample { 

private static Properties prop; 

public static void myMethod() { 

InputStream is = null; 

try { 

prop = new Properties(); 

String propFilePath = System.getProperty(“propFileLocation“); 

InputStream iStream = PropertyFileExample.class.getClassLoader().getResourceAsStream(propFilePath); 

prop.load(iStream); 
prop.getProperty(“dbuser”); 

} catch (FileNotFoundException e) { 

e.printStackTrace(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 

} 
} 

En el setDomainEnv WebLogic (bajo bin) Tenemos que pasar a la ubicación del archivo de propiedades como un argumento -D para JAVA_OPTIONS

conjunto JAVA_OPTIONS =% JAVA_OPTIONS% -DpropFileLocation =/dev/archivo/properties/some.properties

Espero que ayude!

3

Puede establecer un directorio en el classpath y colocar su archivo de propiedades personalizadas en esa carpeta/directorio. Entonces, todo el directorio junto con el archivo de propiedades estará en classpath. para establecer el directorio en la ruta de clase WebLogic 10.3.x

  • Crear una carpeta en %DOMAIN_HOME%\config\ carpeta. ejemplo appConfig.
  • Coloque su archivo de propiedades personalizadas (digamos config.properties) en el directorio/carpeta appConfig.
  • Modificar la setDomainEnv.cmd (Windows) para incluir appConfig en la ruta de clase mediante el establecimiento de %DOMAIN_HOME%\config\appConfig como valor a EXT_POST_CLASSPATH (esta variable ya está definido en el archivo setDomainEnv.cmd) variable como a continuación:

    set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig 
    

Puede acceda a ese archivo en su código java de la siguiente manera:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream ("config.properties"); 
    Properties prop = new Properties(); 
    prop.load(inputStream); 
    String value = prop.getProperty("key"); 

Espero que esto ayude.

Cuestiones relacionadas