puerto - iniciar catalina tomcat
¿Cómo puedo especificar las propiedades del sistema en la configuración de Tomcat al inicio? (8)
(Actualización: si pudiera eliminar esta respuesta, lo haría, aunque desde que se aceptó, no puedo. Estoy actualizando la descripción para proporcionar una mejor orientación y desalentar a las personas de utilizar la mala práctica que describí en la respuesta original).
Puede especificar estos parámetros a través de los parámetros de contexto o de entorno, como en context.xml. Consulte las secciones tituladas "Parámetros de contexto" y "Entradas de entorno" en esta página:
http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
Como señala @netjeff, estos valores estarán disponibles a través del método Context.lookup (String) y no como parámetros del sistema.
Otra forma de especificar estos valores es definir variables dentro del archivo web.xml de la aplicación web que está implementando (consulte a continuación). Como señala @Roberto Lo Giacco, esto generalmente se considera una práctica deficiente ya que un artefacto desplegado no debe ser específico para el entorno. Sin embargo, a continuación se muestra el fragmento de configuración si realmente desea hacer esto:
<env-entry>
<env-entry-name>SMTP_PASSWORD</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>abc123ftw</env-entry-value>
</env-entry>
Entiendo que puedo especificar propiedades del sistema para Tomcat pasando argumentos con el parámetro -D, por ejemplo " -Dmy.prop = value ".
Me pregunto si hay una manera más clara de hacerlo especificando los valores de las propiedades en el archivo context.xml o algún otro archivo de configuración de tomcat. Me gustaría hacer esto porque, primero, es más fácil hacer un seguimiento de mis propiedades, y segundo, tengo varios contextos en ejecución y no sé cómo especificaría las propiedades específicas del contexto a través del parámetro -D.
Estoy usando Tomcat versión 5.5.
Esta pregunta se aborda en la wiki de Apache.
Pregunta: "¿Puedo establecer las propiedades del sistema Java de forma diferente para cada aplicación web?"
Respuesta: No. Si puede editar los scripts de inicio de Tomcat (o mejor, crear un archivo setenv.sh), puede agregar opciones "-D" a Java. Pero no hay forma en Java de tener diferentes valores de propiedades del sistema para diferentes clases en la misma JVM. Hay otros métodos disponibles, como el uso de ServletContext.getContextPath () para obtener el nombre de contexto de su aplicación web y localizar algunos recursos en consecuencia, o para definir elementos en el archivo WEB-INF / web.xml de su aplicación web y luego configurar el valores para ellos en el archivo de contexto de Tomcat (META-INF / context.xml). Ver http://tomcat.apache.org/tomcat-7.0-doc/config/context.html .
http://wiki.apache.org/tomcat/HowTo#Can_I_set_Java_system_properties_differently_for_each_webapp.3F
La respuesta original de cliff.meyers que sugirió el uso de <env-entry>
no ayudará cuando solo se usa System.getProperty ()
De acuerdo con los documentos de Tomcat 6.0 <env-entry>
es para JNDI . Entonces eso significa que no tendrá ningún efecto en System.getProperty()
.
Con el <env-entry>
del ejemplo de cliff.meyers , el siguiente código
System.getProperty("SMTP_PASSWORD");
devolverá nulo, no el valor "abc123ftw".
Según los documentos de Tomcat 6, para usar <env-entry>
tendrías que escribir código como este para usar <env-entry>
:
// Obtain our environment naming context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
// Look up our data source
String s = (String)envCtx.lookup("SMTP_PASSWORD");
Advertencia: no he probado el ejemplo anterior. Pero probé <env-entry>
con System.getProperty (), y eso definitivamente no funciona.
Por lo general, no debe confiar en las propiedades del sistema para configurar una aplicación web; pueden usarse para configurar el contenedor (por ejemplo, Tomcat), pero no una aplicación que se ejecute dentro de tomcat.
cliff.meyers ya ha mencionado la forma en que deberías usar para tu aplicación web. Esa es la forma estándar, que también se ajusta a su pregunta de ser configurable a través de context.xml o server.xml.
Dicho esto, si realmente necesita propiedades del sistema u otras opciones de jvm (como la configuración de memoria máxima) en tomcat, debe crear un archivo llamado "bin / setenv.sh" o "bin / setenv.bat". Estos archivos no existen en el archivo estándar que descarga, pero si están presentes, el contenido se ejecuta durante el inicio (si inicia tomcat mediante startup.sh/startup.bat). Esta es una buena manera de separar sus propias configuraciones de las configuraciones estándar de tomcat y hace que las actualizaciones sean mucho más fáciles. No es necesario modificar startup.sh o catalina.sh.
(Si ejecuta tomcat como servidor de Windows, generalmente usa tomcat5w.exe, tomcat6w.exe, etc. para configurar los parámetros del registro para el servicio).
EDITAR: También, otra posibilidad es ir a Recursos JNDI .
Puede agregar las propiedades necesarias al archivo catalina.properties
en el <tomcat installation directory>/conf
.
Referencia: https://tomcat.apache.org/tomcat-8.0-doc/config/index.html
Todas las propiedades del sistema están disponibles, incluidas las establecidas con la sintaxis -D, las que la JVM pone a disposición automáticamente y las configuradas en el archivo $ CATALINA_BASE / conf / catalina.properties.
Si quiere definir una variable de entorno en su base de contexto en la documentación, debe definirla como se muestra a continuación.
<Context ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
También utilícelos de la siguiente manera:
((Context)new InitialContext().lookup("java:comp/env")).lookup("maxExemptions")
Deberías obtener 10
como salida.
También es posible permitir que un ServletContextListener establezca las propiedades del sistema:
import java.util.Enumeration;
import javax.servlet.*;
public class SystemPropertiesHelper implements
javax.servlet.ServletContextListener {
private ServletContext context = null;
public void contextInitialized(ServletContextEvent event) {
context = event.getServletContext();
Enumeration<String> params = context.getInitParameterNames();
while (params.hasMoreElements()) {
String param = (String) params.nextElement();
String value =
context.getInitParameter(param);
if (param.startsWith("customPrefix.")) {
System.setProperty(param, value);
}
}
}
public void contextDestroyed(ServletContextEvent event) {
}
}
Y luego ponga esto en su web.xml (también debería ser posible para context.xml)
<context-param>
<param-name>customPrefix.property</param-name>
<param-value>value</param-value>
<param-type>java.lang.String</param-type>
</context-param>
<listener>
<listener-class>servletUtils.SystemPropertiesHelper</listener-class>
</listener>
Funcionó para mí
Una alternativa para establecer la propiedad del sistema en la configuración de tomcat es usar la variable de entorno CATALINA_OPTS