Java 将用户定义的环境变量传递给tomcat
我正在使用eclipse进行web应用程序编码。我在其中传递了如下环境变量:Java 将用户定义的环境变量传递给tomcat,java,tomcat,web-applications,Java,Tomcat,Web Applications,我正在使用eclipse进行web应用程序编码。我在其中传递了如下环境变量: 项目-->运行方式-->运行配置。和选定的环境选项卡 添加名为APP\u MASTER\u PASSWORD的新环境变量及其值 我可以在java代码中以System.getenv(“APP\u MASTER\u PASSWORD”)的形式访问该值 但现在我想把这个环境变量传递给tomcat,并在应用程序中访问它,而不是通过eclipse 那么,如何将这样的变量传递给tomcat呢 我在谷歌上搜索了一下。但我没有得到任何
System.getenv(“APP\u MASTER\u PASSWORD”)
的形式访问该值
但现在我想把这个环境变量传递给tomcat,并在应用程序中访问它,而不是通过eclipse
那么,如何将这样的变量传递给tomcat呢
我在谷歌上搜索了一下。但我没有得到任何解决办法
谢谢。标记指定的环境条目是JNDI,可以在
java:/comp/env
下访问。可以使用构造函数和的环境参数为指定环境属性
System.getEnv()
是关于tomcat进程本身的系统环境变量的
要使用bash命令设置环境变量,请执行以下操作:
export-TOMCAT\u OPTS=-Dmy.bar=foo
然后启动Tomcat:
/startup.sh
要检索系统属性条的值,请使用
System.getProperty()
System.getEnv()
可用于检索环境变量,即TOMCAT_OPTS
您可以使用setenv.bat或.sh将环境变量传递给TOMCAT
创建CATALINA_BASE/bin/setenv.bat或.sh文件并在其中放入以下行,然后启动Tomcat
在Windows上:
set APP\u MASTER\u PASSWORD=foo
在类Unix系统上:
export-APP\u-MASTER\u-PASSWORD=foo
在这种情况下,您应该使用系统属性而不是环境变量。编辑tomcat脚本以获得JAVA_选项,并添加如下属性:
-DAPP\u MASTER\u PASSWORD=foo
在你的代码中,写
System.getProperty(“应用程序主密码”)代码>
您也可以在Eclipse中执行此操作,而不是在JAVA_OPTS中,在运行配置中复制VM参数中的行。对于Windows,如果找不到setenv.bat,请在catalina.bat的第二行(在@echo off之后)添加以下内容:
设置APP\u MASTER\u PASSWORD=foo
可能不是最好的方法,但是有效如果您从Eclipse(“服务器”视图)启动Tomcat,那么您应该有一个名为“ApacheTomcat/Tomcat…”的“运行/运行配置”(菜单)条目。当您在运行配置列表中选择此项时,您将看到一个包含多个选项卡的窗口,其中一个选项卡标记为“环境”。在那里,您可以为Tomcat配置环境变量。请确保随后重新启动Tomcat。可以通过在Tomcat安装目录的bin
文件夹中创建setenv.bat
(windows)或setenv.sh
(unix)文件来设置环境变量。但是,环境变量不能从代码中访问
系统属性由java进程的-D
参数设置。您可以在环境变量java\u OPTS
中定义java起始参数
我的建议是将这两种机制结合起来。在您的apache-tomcat-0.0.0\bin\setenv.bat中编写:
set JAVA_OPTS=-DAPP_MASTER_PASSWORD=password1
在Java代码中编写:
System.getProperty("APP_MASTER_PASSWORD")
对于Unix和Mac系统,请转到tomcat文件夹中的/bin/setenv.sh
添加下面的行
export JAVA_OPTS=“$JAVA_OPTS-DAPP_MASTER_PASSWORD=mypass”
现在System.getProperty(“APP\u MASTER\u PASSWORD”)
将返回“mypass”
我的修复方法:
无法工作>>设置为系统环境变量:我在macbash_配置文件中设置了环境变量,但是Tomcat没有看到该变量
不起作用>>setenv.sh:Apache的建议是在setenv.sh
文件中使用用户定义的环境变量,我这样做了
这成功了>>在对Tomcat启动脚本进行了一些研究之后,我发现使用setenv.sh
设置的环境变量在启动过程中丢失。因此,我不得不违背Apache的建议编辑我的catalina.sh
,这就成功了
在catalina.sh
中的run命令中添加您定义的-DUSER\u变量
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
注:这个问题可能是我电脑的本地问题。其他人会有不同的问题。在这篇文章中添加我的答案,以防有人在尝试了所有推荐的方法后仍然面临Tomcat看不到环境变量的问题。使用Tomcat vhost没有选择吗?如果有多个应用程序副本正在运行,则这些环境设置并不方便。我相信它们被称为“环境条目”?我相信这是Ubuntu的特定案例。例如,对于Red Hat,您可以编辑CATALINA_HOME/tomcat7.conf这有点晚,但是。。。根据,创建setenv.sh应该适用于任何风格的Unix。catalina.sh脚本将检查setenv.sh是否存在,如果存在,则在启动过程中执行它。catalina.sh
检查catalina_BASE/bin/setenv.sh
和catalina_HOME/bin/setenv.sh
,如果存在,则执行它们。您可以创建setenv.sh脚本,如果今天还没有,那是加泰罗尼亚的选择——但除了这一点,这正是我刚才得到的帮助!