我想设置为能够在Glassfishv3
和Apache tomcat 6
服务器中设置字符串变量,例如“DEVEL”或“PRODUCTION”,并希望可以从java代码访问它我可以根据变量更改我的应用程序的行为。最简单的方法是什么?
答案 0 :(得分:4)
我认为没有一种设置适用于这两种服务器的环境变量的方法。有些方法可以为每个服务器设置环境变量。
Tomcat :设置环境变量CATALINA_OPTS的值并启动服务器。
export CATALINA_OPTS=-DmyPropertyName=myPropertyValue
GlassFish 3 :您可以使用几种方法。
直接使用GlassFish系统属性。启动服务器。使用asadmin命令'create-system-properties'来定义System属性。重启服务器。
asadmin create-system-property myPropertyName = myPropertyValue。
直接使用JVM选项:启动服务器。使用asadmin命令'create-jvm-option'创建一个新的JVM选项,该选项定义将在服务器启动时使用的System属性。重新启动服务器,使其使用该属性。
asadmin create-jvm-options -DmyPropertyName = myPropertyValue
Tomcat :更改CATALINA_OPTS环境变量的值并重新启动服务器。
export CATALINA_OPTS=-DmyPropertyName=myNEWPropertyValue
GlassFish 3 :更改属性值的方法取决于您用于设置属性值的方法。
直接使用GlassFish系统属性。使用'create-system-properties'命令重新创建GlassFish系统属性,然后重新启动服务器。
asadmin create-system-property myPropertyName = myNEWPropertyValue
直接使用JVM选项:删除旧的jvm选项并在其位置创建一个新选项。重启服务器。
asadmin delete-jvm-options -DmyPropertyName = myPropertyValue
asadmin create-jvm-options -DmyPropertyName = myNEWPropertyValue
Tomcat :重置环境变量CATALINA_OPTS的值,不包括JVM选项定义。重启服务器。
export CATALINA_OPTS=
GlassFish 3 :
使用GlassFish系统属性。使用'delete-system-properties'命令并重新启动服务器。
asadmin delete-system-property myPropertyName
使用JVM选项定义属性。使用delete-jvm-options命令并重新启动服务器。
asadmin delete-jvm-options -DmyPropertyName = myPropertyValue
使用System.getProperty(String)或[System.getProperty(String,String)] [2]
还有其他方法可以区分不涉及代码更改的开发和生产环境。
[2]:http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperty(java.lang.String,java.lang.String)
答案 1 :(得分:3)
对于tomcat,您可以使用CATALINA_OPTS
环境变量来设置系统属性:
CATALINA_OPTS (Optional) Java runtime options used when the "start",
or "run" command is executed.
因此,您可以在IDE中或在命令行中设置它:
CATALINA_OPTS=-DdevelopmentMode=true
然后在你的应用中:
System.getProperty("developmentMode")
答案 2 :(得分:0)
在web.xml中使用env-entry:
<env-entry>
<description>development or production</description>
<env-entry-name>devMode</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>PRODUCTION</env-entry-value>
</env-entry>
在Java代码中,您可以执行以下操作:
Context ctx = new InitialContext();
String devMode = (String) ctx.lookup("java:/comp/env/devMode");
答案 3 :(得分:0)
取决于它应该是常量还是动态变量。是否要在编译期间或在运行时动态更改它。使用1st方法,您可以在web.xml设置init参数或env-entries中执行此操作,甚至可以使用jar存档中打包的简单属性文件。使用第二种方法,您可以在数据库中使用特殊类型的配置表,这些配置表将由应用程序通过piropdically进行池化,或者您可以利用JMX管理机制并使用jconsole动态修改配置