我想在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
答案 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 :(得分: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的可移植性。