AWS Elastic Beanstalk中的JDBC连接字符串

时间:2013-12-09 13:09:57

标签: java mysql tomcat elastic-beanstalk amazon-rds

我想在aws中迁移我的应用程序,

我设置了我的环境。使用弹性豆茎。

在我的应用程序的当前版本中,它在本地运行正常,我使用这个简单的代码设置连接:

在web.xml中我定义了资源:

<resource-ref> 
     <description> Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the <Context> configuration for the web application. </description> 
     <res-ref-name>jdbc/TestDB</res-ref-name>
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
</resource-ref>

然后在config.xml中我定义了资源

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="utente1" password="utente1" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/nazioni?autoReconnect=true" />

现在我能够以这种方式获得连接

/* JNDI query to locate the DataSource object */ 
Context initContext = new InitialContext(); 
Context envContext = (Context)initContext.lookup("java:/comp/env") ; 

// JNDI standard naming root 
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");

/* Ask DataSource for a connection */ 
Connection conn = ds.getConnection();

现在我的问题是:我可以在config.xml中对连接字符串进行硬编码,还是最好使用System.getProperty(“JDBC_CONNECTION_STRING”)?如果是这样,我如何在加载tomcat时设置连接字符串?

谢谢,Loris

3 个答案:

答案 0 :(得分:1)

Tomcat Configuration Reference提到对Ant样式变量替换的支持:

  

支持Apache Ant样式变量替换;系统属性   使用名称propname可以在配置文件中使用   语法$ {propname}。所有系统属性都可用,包括   使用-D语法设置的那些,自动提供的语法   JVM和那些配置的   $ CATALINA_BASE / conf / catalina.properties文件。

这意味着如果您在.ebextensions/<environment-name>.config中定义属性,例如:

option_settings:
  - option_name: JDBC_CONNECTION_STRING
    value: jdbc:mysql://localhost:3306/nazioni?autoReconnect=true

然后你应该能够在配置文件中引用该属性:

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="utente1" password="utente1" driverClassName="com.mysql.jdbc.Driver" url="{JDBC_CONNECTION_STRING}" />

该方法至少比硬编码有两个好处:

  1. 可以在正在运行的实例
  2. 上的AWS Beanstalk控制台中手动更改该值
  3. 可以在正在运行的实例上以编程方式更改该值

答案 1 :(得分:0)

更好地使用XML配置当从一个环境移动到另一个环境时,大部分应用程序都会被删除。可能会有XML的变化,因此XML在我的体验中会更好。

此外,你可以使用属性文件,但是当你想要一些经常更改的属性时,它会帮助大多数情况,比如基于配置的事物DB连接字符串,SMTP等等。

WEB.XML的名称是部署描述符,因为在部署时可以根据不同的环境加载有关应用程序的详细信息。

答案 2 :(得分:0)

通常,最好不要在应用程序(或其他类似的应用程序配置)中硬编码连接字符串信息。理想情况下,您希望外部化应用程序配置,以便您的应用程序可以在环境之间移植。

对于Elastic Beanstalk,您可以同时在不同的Beanstalk环境中部署相同的应用程序WAR(可能是QA和PROD环境),如果您对连接字符串进行硬编码,那么两个WAR文件都将指向到同一个数据库实例。

同样,您可能需要在某个时候更改连接字符串,可能是因为您的数据库实例名称已更改,如果您对连接字符串进行硬编码,则必须重新构建并部署新的JAR。

如果使用Elastic Beanstalk提供的JDBC_CONNECTION_STRING配置并在运行时读取这些配置,则可以使用Elastic Beanstalk控制台或API轻松更改连接字符串,还可以在不同环境之间维护单个WAR的可移植性。