我对这个有点困惑。它在Windows上本地工作,但是当我部署到AWS EC2,安装了Apache Tomcat并配置了环境变量时,它不工作。
java.sql.SQLException: The url cannot be null
这只能来自尝试连接到数据库的代码位,即数据库连接URL为NULL,这意味着.war文件由于某种原因没有通过代码正确获取环境变量;
System.getenv("myEnvVar_databaseConnectionURL");
我能做些什么来调试这里发生的事情呢?看起来应该可以正常工作,但是没有。我的直觉告诉我这是一些奇怪的Linux环境变量,它基于正在运行的用户,例如,某种全局环境变量VS每用户环境变量的东西。但这只是一个猜测,我需要深入了解一点。例如,根环境变量VS {Tomcat用户X待定这是什么}环境变量等。
我可以看到环境变量时,SSH'ing在作为'根'和运行;
printenv | myEnvVar_databaseConnectionURL
然而,当在部署的代码中执行基本命令时,输出是NULL;
System.out.println("URL: " + System.getenv("myEnvVar_databaseConnectionURL"));
这是当我运行命令打印Tomcat输出从AWS EC2;
journalctl -u tomcat -f
在我进一步调查的时候发布这个问题。
1条答案
按热度按时间sd2nnvve1#
在Linux中,环境变量不会在会话之间共享,也不会在用户帐户之间共享。仅仅因为您可以在以
root
身份登录时看到环境变量,并不意味着以tomcat
用户身份运行的tomcat
进程可以看到相同的环境变量。如果您在登录时自动看到环境变量,这是因为作为会话创建的一部分,shell执行的脚本之一正在设置这些环境变量。由于您根本没有提供任何有关如何设置环境变量的细节,我无法指出您做错了什么,也无法更详细地解释您当前的解决方案为什么不起作用。
为Tomcat设置环境变量的最佳解决方案是将它们添加到
$CATALINA_BASE/bin/setenv.sh
脚本中,其中$CATALINA_BASE
在系统中的确切位置取决于所使用的Linux风格(Ubuntu、RedHat等)。