2011-12-04 15 views
9

En el desarrollo de PHP, es posible determinar si la aplicación se está ejecutando o no en un entorno de producción o desarrollo desde la variable de entorno del servidor.Entornos de producción/desarrollo de Tomcat

¿Hay una variable similar disponible en los servidores tomcat, o hay una mejor manera de apuntar a las aplicaciones para producción y desarrollo?

Respuesta

0

Puede configurar las variables de entorno del sistema operativo en los scripts de arranque de tomcat (por ejemplo, run.sh en el entorno Linux) y leerlos desde su programa. También podría configurar variables de entorno Java (como esta: Passing environment variables to a JVM, in a platform-independent manner). Personalmente utilizo diferentes archivos de propiedades para dev/prod/etc y leo esta variable para el archivo de propiedades. Solo se implementa el archivo de propiedad requerido.

2

No puede hacer tal cosa de forma predeterminada. En cualquier caso, no se basan en el envase para determinar cada vez que la aplicación está en el entorno X. Yo diría que debe hacerlo usando uno de los métodos siguientes (en orden de preferencia):

  1. Usa lo que tu herramienta de compilación te brinde. Por ejemplo: usar perfiles maven. http://maven.apache.org/guides/introduction/introduction-to-profiles.html
  2. Utilice un archivo de propiedad para la aplicación con una propiedad "modo".
  3. pasar una -Dmyproject.mode = propiedad XXXX a la JVM
  4. Usar una propiedad del sistema OS

os animo a usar algo como # 1. Seguro que estás usando algún tipo de herramienta para construir tu aplicación (Ant, SBT, etc.).

Imagínese si por error alguien reinstala Tomcat, elimine las propiedades del sistema operativo o similar. Tu aplicación podría ejecutarse en modo prod.

6

Cada instancia de Tomcat que tenemos tiene un indicador isProduction definido en la sección GlobalNamingResources del archivo server.xml.

server.xml:

<Server ...> 
    ... 
    <GlobalNamingResources> 
    <Environment name="isProduction" value="false" type="java.lang.Boolean" override="false" /> 
    </GlobalNamingResources> 

    <Service name="Catalina"> 
    ... etc ... 
    </Service> 
</Server> 

Esto permite que la propiedad esté disponible en toda la aplicación mediante la creación de una propiedad en el context.xml que hace referencia al recurso:

context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Context ...> 
    <ResourceLink name="isProduction" global="isProduction" type="java.lang.Boolean" /> 
    ... 
</Context> 

Para recuperar el valor:

public boolean isProduction() { 
    Object o; 
    try { 
     o = (new InitialContext()).lookup("java:comp/env/isProduction"); 
    } catch (NamingException e) { 
     o = Boolean.FALSE; // assumes FALSE if the value isn't declared 
    } 
    return o == null ? Boolean.FALSE : (Boolean) o; 
} 
Cuestiones relacionadas