gpt4 book ai didi

java - AWS Elastic Beanstalk : access System variables

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:52 25 4
gpt4 key购买 nike

我有一个传统的 Tomcat Web 应用程序,它使用 JNDI 连接到 Postgres DB(读取 context.xml)。在 AWS EBS 中,可以使用系统属性来读取特定的内容,例如 jdbc 连接参数,这对于不同环境(开发、登台、生产)轻松使用相同的包而无需更改 context.xml 文件会很棒。由于我使用的是 JNDI DataSource,因此我正在访问原始数据源,然后更改 url 和密码,如下所示:

org.apache.tomcat.jdbc.pool.DataSource ds = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/myapp");
String jdbcURL = System.getProperty("JDBC_CONNECTION_STRING");
String username = System.getProperty("PARAM1");
String password = System.getProperty("PARAM2");
if (!StringUtils.isEmpty(jdbcURL)){
ds.setUrl(jdbcURL);
ds.setUsername(username);
ds.setPassword(password);
}

使用 Tomcat DataSource 我可以访问连接参数的 setter 和 getter。本地测试(在Tomcat的VM参数中添加系统参数,完美运行。但是当我上传到AWS EBS中的测试环境时,这些参数在开始时(加载应用程序时)为空,但稍后它们就可用:以这种方式在jsp页面中测试它们

The JDBC_CONNECTION_STRING environment property is:
<%= System.getProperty("JDBC_CONNECTION_STRING") %>
</p>

<p>
The PARAM1 environment property is:
<%= System.getProperty("PARAM1") %>
</p>
<p>]
The PARAM2 environment property is:
<%= System.getProperty("PARAM2") %>
</p>

并且打印出正确的值。我唯一的猜测是系统属性稍后加载,同时我在应用程序启动时调用的监听器中设置与数据库的连接(在 web.xml 中设置)。

知道为什么会失败吗?

谢谢

罗伊

编辑:我找到了问题,但没有找到解决方案:问题是,当在lookup()方法中加载DataSource时,它还尝试建立连接!它不会成功,因为 context.xml 中的 url 是 localhost,并且部署时我没有数据库。

有人知道如何不立即连接,而是等到第一次 getConnection() 调用吗?这是我的 context.xml

<Resource auth="Container" 
driverClassName="org.postgresql.Driver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
maxActive="1000" maxIdle="1000" maxWait="2000"
autoReconnect="true"
logAbandoned="true"
name="jdbc/townflix"
type="org.apache.tomcat.jdbc.pool.DataSource"
url="jdbc:postgresql://localhost:5432/mydb?prepareThreshold=3"
username="user"
password="pass"

/>

最佳答案

我不知道为什么会失败,但我可以告诉你我在个人项目中的做法。

我使用 .ebextensions/*.config 文件用我的配置生成并覆盖 context.xml,从而在容器启动之前正确设置我的数据源。

参见:https://github.com/Craftware/Kornell/blob/master/kornell-api/src/main/webapp/.ebextensions/tomcat7.config

关于java - AWS Elastic Beanstalk : access System variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com