我对这个有点困惑。它可以在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等)。