【问题标题】:TOMCAT_OPTS, environment variable and System.getEnv()TOMCAT_OPTS、环境变量和 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 时,它在本地运行,但不在我的服务器上...

【问题讨论】:

    标签: java tomcat maven environment-variables


    【解决方案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:

        设置:

        1. 打开/etc/default/tomcat7文件
        2. 添加行somekey=value

          注意:变量名不能包含点。

        3. 重启Tomcat:service tomcat7 restart

        阅读:

        System.getenv("somekey");

        【讨论】:

        • 这个答案比我的答案更简洁易读,我喜欢它:)
        【解决方案4】:

        您是否在 Eclipse IDE 上使用 Tomcat?然后你只需要按照以下步骤:

        1. 双击tomcat服务器
        2. 打开启动配置
        3. 环境
        4. 新(名称/值)

        【讨论】:

          【解决方案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)。在本地,一切运行完美。会是什么?
          猜你喜欢
          • 2015-11-08
          • 1970-01-01
          • 2015-06-29
          • 2016-04-21
          • 1970-01-01
          • 1970-01-01
          • 2015-09-16
          • 1970-01-01
          • 2019-08-21
          相关资源
          最近更新 更多