Java AWS Elastic Beanstalk中的JDBC连接字符串

Java AWS Elastic Beanstalk中的JDBC连接字符串,java,mysql,tomcat,amazon-elastic-beanstalk,amazon-rds,Java,Mysql,Tomcat,Amazon 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 da

我想将我的应用程序迁移到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中硬编码连接字符串,还是最好使用System.getProperty(“JDBC_connection_string”)?如果是这样,那么在加载tomcat时如何设置连接字符串


谢谢,Loris最好使用XML配置,因为当从一个环境移动到另一个环境时,大部分应用程序都会使用XML。XML可能会发生变化,因此根据我的经验,XML会更好

您也可以使用属性文件,但在大多数情况下,当您需要经常更改某些属性时,属性文件会有所帮助,例如标签,而不是基于配置的内容DB连接字符串、SMTP等

WEB.XML的名称是Deployment descriptor,因为在部署时,它有助于加载有关基于不同环境的应用程序的详细信息。

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

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

这意味着如果在
.ebextensions/.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}" />

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

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

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

    在弹性Beanstalk的情况下,您可以同时在不同的Beanstalk环境(可能是QA和PROD环境)中部署相同的应用程序WAR,如果您硬编码连接字符串,那么两个WAR文件将指向同一个DB实例

    类似地,您可能需要在某个时刻更改连接字符串,可能是因为您的DB实例名称已更改,如果您硬编码连接字符串,则必须重新构建并部署新的JAR


    如果您使用Elastic Beanstalk提供的JDBC_CONNECTION_字符串配置,并在运行时读取这些配置,那么您可以使用Elastic Beanstalk控制台或API轻松更改连接字符串,您还可以为不同环境之间的单一战争保持可移植性。

    因此,您认为最好在config.xml中硬编码连接字符串?不要想,这是我们大多数项目所做的。因为基于环境,大部分时间都会配置xml。
    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}" />