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()的主要内容,如果未能解决你的问题,请参考以下文章

java 读取环境变量和系统变量的方法

系统变量之System.getenv()和System.getProperty()

系统变量之System.getenv()和System.getProperty()

Java 系统属性和环境变量

如何在 C# 中获取和设置环境变量?

环境变量system(day10)