2012-09-13 22 views
14

Tengo un WebProject con un argumento VM llamados "-Dfolder"Pass VM argumento para Apache Tomcat

uso ese argumento en applicationContext así:

<value>file:${FNET_CORE_CONFIG}/conf/${folder}/jdbc.properties</value> 

En Eclipse, para las pruebas, yo uso "Configuración Ejecutar" para ajustar el valor de la siguiente manera:

-Dfolder=Dev 

Ahora, yo quiero probar mi aplicación Web en Apache Tomcat, así que necesito para configurar/enviar la carpeta VM argumento.

¿Cómo hago eso?

Tengo que usar setenv.sh? ¿Cómo?. ¿Puede alguien darme un ejemplo?

Gracias y lo siento por mi Inglés

+1

Creo que deberías intentar usar los parámetros [ServletContext] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html), ya que es un proyecto web. –

+0

Creo que esto no es lo que necesito. Necesito establecer el valor en apache para WAR, no en desarrollo. También necesito cambiar el valor de vez en cuando para el entorno de Desarrollo, Prueba y Demostración. Gracias de todos modos –

+0

Es por eso que existe el archivo web.xml. Es un descriptor de implementación, deliberadamente separado del código. – EJP

Respuesta

18

No sé qué versión de Tomcat usando, pero en Tomcat 7 en catalina.sh archivo se puede especificar CATALINA_OPTS variables y esta variable pasaré a JVM.

Pero quizás establecer una variable de entorno no sea la mejor manera de lograr su objetivo. Tal vez será mejor creación de archivo separado "app.properties", e incluirlo en applicationContext así:

<context:property-placeholder location="classpath*:app.properties" /> 

y la solución para catalina.sh

# CATALINA_OPTS (Optional) Java runtime options used when the "start", 
#     "run" or "debug" command is executed. 
#     Include here and not in JAVA_OPTS all options, that should 
#     only be used by Tomcat itself, not by the stop process, 
#     the version command etc. 
#     Examples are heap size, GC logging, JMX ports etc. 

ejemplo:

CATALINA_OPTS = "-Dfolder = Dev"

EDIT:

para las ventanas que debería ser algo así como set CATALINA_OPTS="-Dfolder=Dev"

EDIT:

En la configuración de la primavera puede utilizar la propiedad del sistema al igual que $ {propertyName}, y también puede incluir los archivos de definición de la propiedad, con context:property-placeholder, y todo definido en las propiedades del archivo también está disponible en config.

Por ejemplo, tiene propiedades de conjunto de bases: config.properties y un conjunto de archivos con configuraciones de conexión db (DEV.properties, UAT.properties, PROD.properties). Entonces, ¿cómo puede incluir diferentes propiedades para diferentes entornos? Se puede hacer de muchas maneras, por ejemplo, establecer las propiedades del sistema en catalina.bat

set CATALINA_OPTS="-Dbuild=DEV" 

y en applicationConfig.xml

<context:property-placeholder location="classpath*:${build}.properties, classpath*:config.properties" /> 

O puede crear diferente configuración de generación e incluir en guerra final solamente una propiedades (DEV, UAT, PROD) para cada configuración de compilación. En applicationConfig establecer algo así como:

<context:property-placeholder location="classpath*:*.properties" /> 
+0

Estoy trabajando con Apache Tomcat 7. Estoy usando VM Argument porque necesito leer una "parte" de la ruta para Log4j.properties y JDBC.properties. Así que lo intento con applicationContext y no puedo hacerlo funcionar. Voy a probar tu respuesta ahora mismo. Muchas gracias –

+0

Además, estoy trabajando con Windows. ¿Debo usar catalina.sh o catalina.BAT? –

+0

¿Utiliza 'maven' o' ant' para construir? Una solución más: crear una configuración de compilación diferente para entornos diferentes y establecer todas las propiedades que necesite en el proceso de compilación. Sé que Jenkins permite configurar esto fácilmente. (Si usa Jenkins como servidor de CI) – user1516873

9

Ir a $ CATALINA_HOME y editar setenv.sh archivo mediante la adición de los parámetros con el valor. Si desea agrupar múltiples parámetros, sepárelos usando space

P. ej.

cd /opt/tomcat/bin/ 
sudo nano setenv.sh 

editar la línea

CATALINA_OPTS="${CATALINA_OPTS}" 

a

CATALINA_OPTS="${CATALINA_OPTS} -Dparam=value -Dparam2=value2" 

Tomcat reinicio:

service tomcat restart 

que ahora debería ser capaz de ver los argumentos que se pasan a Tomcat cuando se ejecuta :

ps aux | grep tomcat 
+2

Voto ascendente porque este usuario mostró un ejemplo con múltiples parámetros. Estoy acostumbrado a utilizar el gui de configuración de Tomcat y desde allí no es obvio que los parámetros estén delimitados por espacios. – Sebastian

0

hizo funcionar en Windows, mediante la generación de un archivo setenv.bat en el mismo directorio que catalina.bat y startup.bat (como se recomienda en catalina.bat) y poner en el contenido de la .bat :

set CATALINA_OPTS="-DyourVariableName=yourValue" 

Eso es todo. Me gustó de esta manera, ya que se ve bastante limpio

Cuestiones relacionadas