Java 应用程序 WAR 文件未使用 Apache Tomcat 和 System.getenv 在 AWS EC2 上选取环境变量



我对这个有点困惑。它可以在Windows上本地工作,但是当我部署到安装了Apache Tomcat并配置了环境变量的AWS EC2时,它无法工作。我得到错误;

java.sql.SQLException: The url cannot be null

这只能来自试图连接到数据库的代码位,即数据库连接URL为NULL,这意味着.war文件由于某种原因没有通过代码正确地拾取环境变量;

System.getenv("myEnvVar_databaseConnectionURL");

我能做些什么来调试这里发生的事情?看起来这应该行得通,但事实并非如此。我的直觉告诉我,这是一些奇怪的Linux环境变量的东西,这是基于正在运行的用户,也就是说,某种全局VS每用户环境变量的东西。但这只是猜测,我还需要进一步研究。例如,根环境变量VS {Tomcat用户X TBC这是什么}环境变量等

当SSH以"root"身份登录并运行时,我可以看到环境变量;

printenv | myEnvVar_databaseConnectionURL

然而,当在部署的代码中执行基本命令时,输出是NULL

;
System.out.println("URL: " + System.getenv("myEnvVar_databaseConnectionURL"));

当我运行命令将AWS EC2的Tomcat输出打印为;

journalctl -u tomcat -f

在我进一步调查时张贴这个问题。

环境变量不能跨会话共享,在Linux中也不能跨用户帐户共享。仅仅因为您在作为root登录时可以看到环境变量,并不意味着作为tomcat用户运行的tomcat进程可以看到相同的环境变量。如果您在登录时自动看到一个环境变量,这是因为shell在创建会话时执行的脚本之一正在设置这些环境变量。

既然你没有提供任何关于你如何设置环境变量的细节,我无法指出你做错了什么,或者更详细地解释为什么你当前的解决方案不起作用。

设置Tomcat环境变量的最佳解决方案是将它们添加到$CATALINA_BASE/bin/setenv.sh脚本中。$CATALINA_BASE在您的系统中的确切位置取决于您使用的Linux版本(Ubuntu, RedHat等)。

相关内容

  • 没有找到相关文章