在shell脚本中设置环境变量/在Tomcat应用程序中访问环境变量

10

我想添加一个环境变量,可以被我的Tomcat Web应用程序访问。 我已经阅读这个链接,但是我想在root用户中设置环境变量。 如何做到这一点?

如何在root用户中设置环境变量?

4个回答

9
根据文档 (http://tomcat.apache.org/tomcat-7.0-doc/RUNNING.txt),您应该在 $CATALINA_HOME/bin/setenv.sh 中设置所有环境变量。
编辑: 为了完整起见,值得一提的是,尽管这是推荐的方式,上述文档指出: “默认情况下,setenv 脚本文件不存在。如果脚本文件同时存在于 CATALINA_BASE 和 CATALINA_HOME 中,则以 CATALINA_BASE 中的为准。” 如果缺少它,您还可以查找以下环境变量: /etc/tomcat/tomcat[67].conf (suse) 或 /etc/default/tomcat[67].conf (例如 ubuntu) 或 /etc/sysconfig/tomcat[67].conf (rhel、fedora)

1

以下是操作步骤:

  1. 使用sudo su命令并进入/var/lib/tomcat8/bin/目录(或者您的tomcat bin路径所在的目录)
  2. 执行touch setenv.sh(如果没有该文件),如果已经存在则执行'vi setenv.sh'
  3. 执行chmod 777 setenv.sh (使文件可执行)
  4. 执行vi setenv.sh 并在setenv.sh文件中加入以下代码:export key=value
  5. 执行sudo systemctl restart tomcat.service 命令重启tomcat服务

在您的java文件中,您可以使用以下代码检查变量是否已设置:

private static void printEnv() {
    System.out.println("******************************Environment Vars*****************************");
    Map<String, String> enviorntmentVars = System.getenv();
    enviorntmentVars.entrySet().forEach(System.out::println);

    System.out.println("******************************system Vars*****************************");
    Properties enviorntmentProperties = System.getProperties();
    enviorntmentVars.entrySet().forEach(System.out::println);
}

这似乎不起作用。环境变量在Tomcat中没有设置。 - undefined

0

找到了解决方案...我所做的是将导出语句放在/etc/init.d/tomcat6的顶部,并通过命令sudo /etc/init.d/tomcat6 restart重新启动服务器。现在,我的运行在Tomcat服务器上的Web应用程序可以访问该变量。


5
我不认为修改本机的Apache脚本“/etc/init.d/tomcat6”是一个好主意。你的更改可能会干扰未来的更新,而且你还在修改默认的Tomcat行为。对我来说,这似乎有些不正规。 - Kevin Meredith
2
我同意你的观点。请给我提供其他的方法。我已经在AWS CloudFormation上设置了所有的环境,以便在AWS基础设施中进行自动化。因此,它可能会自动完成所有事情。但仍在寻找更好的建议。 - Anand Soni
我不确定你是否曾经使用AWS userdata使其工作,因为我相当确定tomcat不会接收这些数据。请参考上面的答案以获取另一种解决方案。 - gsaslis

-1

这个不起作用吗?

前往您的环境文件。 sudo vi /etc/environment 添加所需的变量并保存文件。

我认为在最近的Ubuntu中,您需要重新启动系统才能使更改生效。


但我不能重新启动系统。有没有办法在不重新启动系统的情况下完成这个操作? - Anand Soni
也许触及 /etc/environment 并 source /etc/environment 可以解决问题。 - Raveesh Sharma
对我来说没有用,我不得不修改/etc/init.d/tomcat7并添加export FOO=bar - dedek
根据Ubuntu文档,在运行sudo service service_name start时,不会引用/etc/environment中的环境变量。请参见问题:http://stackoverflow.com/questions/16645430 - dedek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接