Java 将用户定义的环境变量传递给tomcat

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呢 我在谷歌上搜索了一下。但我没有得到任何

我正在使用eclipse进行web应用程序编码。我在其中传递了如下环境变量:

  • 项目-->运行方式-->运行配置。和选定的环境选项卡
  • 添加名为APP\u MASTER\u PASSWORD的新环境变量及其值
  • 我可以在java代码中以
    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”

    我的修复方法:
  • 无法工作>>设置为系统环境变量:我在mac
    bash_配置文件中设置了环境变量,但是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脚本,如果今天还没有,那是加泰罗尼亚的选择——但除了这一点,这正是我刚才得到的帮助!