29

我正在使用 Eclipse 进行 Web 应用程序编码。在此我传递了环境变量,如:

  1. 项目--> 运行方式--> 运行配置。并选择环境选项卡。
  2. 添加具有名称APP_MASTER_PASSWORD及其值的新环境变量。

我可以在 java 代码中以System.getenv("APP_MASTER_PASSWORD").

但现在我想将此环境变量传递给 tomcat 并在应用程序中访问它,而不是通过 eclipse 传递。

那么我怎样才能将这样的变量传递给tomcat呢?

我用谷歌搜索了它。但我没有得到任何解决方案。

4

8 回答 8

52

您可以使用 setenv.bat 或 .sh 将环境变量传递给 Tomcat。

创建 CATALINA_BASE/bin/setenv.bat 或 .sh 文件并将以下行放入其中,然后启动 Tomcat。

在 Windows 上:

set APP_MASTER_PASSWORD=foo

在类 Unix 系统上:

export APP_MASTER_PASSWORD=foo

于 2013-06-11T05:01:06.203 回答
20

在这种情况下,您应该使用系统属性而不是环境变量。编辑 JAVA_OPTS 的 tomcat 脚本并添加如下属性:

-DAPP_MASTER_PASSWORD=foo

在你的代码中,写

System.getProperty("APP_MASTER_PASSWORD");

您也可以在 Eclipse 中执行此操作,而不是 JAVA_OPTS,复制运行配置中 VM 参数中的行。

于 2013-06-11T05:21:59.603 回答
11

标记指定的环境条目<Environment>是 ​​JNDI,可使用InitialContext.lookupjava:/comp/env访问。您可以通过对InitialContext构造函数和应用程序资源文件使用 environment 参数来为JNDI指定环境属性。

System.getEnv()是关于tomcat进程本身的系统环境变量。

要使用 bash 命令设置环境变量: export TOMCAT_OPTS=-Dmy.bar=foo 并启动 Tomcat: ./startup.sh 要检索系统属性的值,请bar使用System.getProperty()System.getEnv()可用于检索环境变量,即TOMCAT_OPTS.

于 2013-06-10T07:57:55.210 回答
8

可以通过在您的 tomcat 安装目录的文件夹中创建setenv.bat(windows) 或setenv.sh(unix) 文件来设置环境变量。bin但是,环境变量将无法从您的代码中访问。

系统属性-D由java 进程的参数设置。您可以在环境变量中定义 java 起始参数JAVA_OPTS

我的建议是结合这两种机制。在你apache-tomcat-0.0.0\bin\setenv.bat写的:

set JAVA_OPTS=-DAPP_MASTER_PASSWORD=password1

并在您的 Java 代码中编写:

System.getProperty("APP_MASTER_PASSWORD")
于 2019-04-02T08:33:27.177 回答
5

对于 Unix 和 Mac 系统,转到 tomcat 文件夹中的 /bin/setenv.sh

添加以下行

export JAVA_OPTS="$JAVA_OPTS -DAPP_MASTER_PASSWORD=mypass"

现在System.getProperty("APP_MASTER_PASSWORD")会回来"mypass"

于 2019-07-17T08:47:07.003 回答
1

如果您从 Eclipse(“服务器”视图)启动 Tomcat,那么您应该有一个名为“Apache Tomcat / Tomcat ...”的“运行/运行配置”(菜单)条目。当您在运行配置列表中选择此条目时,您会看到一个带有多个选项卡的窗口,其中一个标记为“环境”。您可以在那里为您的 Tomcat 配置环境变量。确保之后重新启动 Tomcat。

于 2016-10-21T13:34:47.367 回答
0

在 Windows 的情况下,如果找不到 setenv.bat,请在 catalina.bat 的第二行(@echo off 之后)添加:
SET APP_MASTER_PASSWORD=foo

可能不是最好的方法,但有效

于 2014-08-18T16:19:00.673 回答
0

我的修复方法:

  1. DID NOT WORK >> 设置为系统环境变量:我已经在我的 mac 中设置了环境变量bash_profile,但是,Tomcat 没有看到该变量。

  2. 不起作用>> setenv.sh:Apache 的建议是在setenv.sh文件中包含用户定义的环境变量,而我做到了。

  3. 这行得通!>> 对Tomcat启动脚本稍作研究,发现启动时设置的环境变量usingsetenv.sh丢失。所以我不得不catalina.sh根据 Apache 的建议来编辑我的内容,这样就成功了。

在运行命令中添加您的-DUSER_DEFINED变量catalina.sh

eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  -classpath "\"$CLASSPATH\"" \
  -Djava.security.manager \
  -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  -Dcatalina.base="\"$CATALINA_BASE\"" \
  -Dcatalina.home="\"$CATALINA_HOME\"" \
  -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  -DUSER_DEFINED="$USER_DEFINED" \
  org.apache.catalina.startup.Bootstrap "$@" start

PS:这个问题可能是我电脑的本地问题。其他人会有不同的问题。将我的答案添加到这篇文章中,以防万一有人在尝试所有推荐的方法后仍然面临 Tomcat 看不到环境变量的问题。

于 2020-03-06T23:42:31.843 回答