TOMCAT_OPTS、环境变量和 System.getEnv()
Posted
技术标签:
【中文标题】TOMCAT_OPTS、环境变量和 System.getEnv()【英文标题】:TOMCAT_OPTS, environment variable and System.getEnv() 【发布时间】:2011-07-04 04:10:37 【问题描述】:我使用tomcat,我想在我的java代码中获取一个环境变量。
要设置环境变量,我使用这个 bash 命令:
export TOMCAT_OPTS=-Dmy.var=foo
之后我启动tomcat
./startup.sh (in bin folder of tomcat)
在我的 java 代码中,我尝试获取这个变量:
System.getEnv("my.var")
但它返回 NULL。
我该怎么做?
我准确地说,如果我使用 maven 启动 tomcat 并使用 eclipse 环境选项卡,则找到变量!但是我需要像上面那样在生产模式下启动tomcat。
编辑:直接使用 export MY_VAR 时,它在本地运行,但不在我的服务器上...
【问题讨论】:
【参考方案1】:在安装的Tomcat8解压包中,有一个名为“catalina.properties”的文件
你可以在这个文件中引入环境变量,只需添加
my.special.variable=some_value
【讨论】:
【参考方案2】:如果想在tomcat中设置环境变量通过getEnv进入,请使用setenv。
即在 tomcat/bin 中,您拥有(或应该创建)setenv.sh
(或 setenv.bat
用于шindoшs)并定义
my.var=FOO
OTHERVAR=BOO
在前面加上set
代表шindoшs。
【讨论】:
【参考方案3】:对于 Tomcat7 + Ubuntu:
设置:
-
打开
/etc/default/tomcat7
文件
添加行somekey=value
注意:变量名不能包含点。
重启Tomcat:service tomcat7 restart
阅读:
System.getenv("somekey");
【讨论】:
这个答案比我的答案更简洁易读,我喜欢它:)【参考方案4】:您是否在 Eclipse IDE 上使用 Tomcat?然后你只需要按照以下步骤:
-
双击tomcat服务器
打开启动配置
环境
新(名称/值)
【讨论】:
【参考方案5】:如果你使用的是tomcat7和unbuntu os,你可以编辑/etc/default/tomcat7文件, 只需添加一行 yourvar=yourvalue 即可。
如下:
# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of tomcat7.
TOMCAT7_USER=tomcat7
# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of tomcat7.
TOMCAT7_GROUP=tomcat7
IM4JAVA_TOOLPATH=/usr/local/bin/
# The home directory of the Java development kit (JDK). You need at least
# JDK version 1.5. If JAVA_HOME is not set, some common directories for
# OpenJDK, the Sun JDK, and various J2SE 1.5 versions are tried.
#JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk
# You may pass JVM startup parameters to Java here. If unset, the default
# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
#
# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved
# response time). If you use that option and you run Tomcat on a machine with
# exactly one CPU chip that contains one or two cores, you should also add
# the "-XX:+CMSIncrementalMode" option.
JAVA_OPTS="-Djava.awt.headless=true -Xmx2048m -XX:+UseConcMarkSweepGC"
【讨论】:
[对于 Ubuntu 操作系统] 这需要更高。设置tomcat可以读取的环境变量的最简单、最一致的方法 @Siddharth 看到 Nikita Bosik 的回答 :) 快乐编码【参考方案6】:tomcat 有一个配置文件,默认位于 /dev/tomcat6/tomcat6.conf
我相信(查看 /etc/init.d/tomcat 以查看“TOMCAT_CFG”的值是什么。这是“来源”.
in这个文件(. $TOMCAT_CFG
)在tomcat启动(或停止,重新启动等)之前,所以如果你添加行:
MY_VAR=somevalue
这应该对您的 java 应用程序可用。
我知道这是一个老问题,但也许对其他人有用:)
【讨论】:
感谢您的回答,但该帖子已在 1 年前得到回答!您给出的解决方案已经解释为接受的答案... 哦,是的。好点:)我没有注意到那个,因为它太短了(尽管有勾号(我责怪它上面的广告:P))【参考方案7】:我终于在 CATALINA_HOME 中找到了一个名为 tomcat6.conf 的配置文件。 我将 export my.var=foo 添加到文件末尾, System.getenv("my.var") 现在返回值...
噩梦……
【讨论】:
如果它意味着什么,多亏了你忍受了那个噩梦,现在我和其他人在这条路上徘徊将不必:)【参考方案8】:现在您已经向我解释说您正在使用基于 yum 的安装(建议使用 Red Hat 发行版衍生产品),如果您将 Tomcat 作为守护程序运行,那么您需要设置“export TOMCAT_OPTS=.. ." 命令在 /etc/profile 中(用于全局范围),或将其添加到启动 Tomcat 实例的用户家中的 ~/.profile 或 ~/.bashrc 文件中。
【讨论】:
这是 Amazon EC2 linux 机器上的标准安装,带有“yum install tomcat6”。并且使用 CATALINA_OPTS 也不会运行:( 另一个问题,您是否从与运行 tomcat 的脚本不同的脚本运行 bash "export" 命令? 在 bash_provile 或 bashrc 中设置导出无法运行,但我找到了解决方案(请参阅我的 anwser)。感谢您的帮助【参考方案9】:System.getEnv
返回环境变量,如 PATH 或在您的示例中为 TOMCAT_OPTS)。
当您使用-Dfoo=bar
调用Java 时,您无需设置环境变量:您传递了一个系统属性。使用System.getProperty
获取foo的值。
【讨论】:
谢谢,但是我怎样才能将环境变量指定给 Tomcat 呢? 创建环境变量:export FOO=BAR.读取环境变量:System.getenv("FOO")。将系统属性传递给 Java 应用程序:java -Dfoo=bar my.java.App。读取系统属性:System.getProperty("foo")。将系统属性传递给 Tomcat:export TOMCAT_OPTS=-Dfoo=bar。要在您的网络应用程序中读取系统属性:System.getProperty("foo"). 似乎在我的服务器上,无法读取变量(返回null)。在本地,一切运行完美。会是什么?以上是关于TOMCAT_OPTS、环境变量和 System.getEnv()的主要内容,如果未能解决你的问题,请参考以下文章
系统变量之System.getenv()和System.getProperty()