存储数据库配置参数的最佳方式?
Posted
技术标签:
【中文标题】存储数据库配置参数的最佳方式?【英文标题】:Best way to store Database configuration parameters? 【发布时间】:2011-04-14 08:41:29 【问题描述】:我目前正在开发一个 Web 应用程序。 Web 应用程序需要访问患者数据库,该数据库目前是一个简单的 mysql 数据库,但将来可能会被其他数据库(或数据源)取代。目前,一切都是硬编码的,但我想有一些方法来配置数据库连接(即数据库 URL、用户、密码等)。
什么是简单直接的解决方案?如果我可以通过简单的文件编辑来更改配置就好了。
我看到有Properties API 和Preferences。还是有一些关于 servlet/Web 应用程序的习语?
【问题讨论】:
【参考方案1】:servlet 是 Web 应用程序的一部分,并且此 Web 应用程序部署在 Java EE 容器(Tomcat、WebLogic 等)中。
获取数据库连接的标准方法是使用 JNDI 获取 DataSource 实例,并请求与此 DataSource 的连接。大多数情况下,DataSource 将池化数据库连接以避免创建和关闭太多连接,从而更快:
Context initCtx = new InitialContext();
DataSource dataSource = (DataSource) initCtx.lookup("java:comp/env/jdbc/MyDataSource");
Connection c = dataSource.getConnection();
try
// ...
finally
c.close(); // makes the connection available for a new thread
必须在 web.xml 文件中声明数据源:
<resource-ref>
<description>Datasource example</description>
<res-ref-name>jdbc/MyDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
必须在您的 Java EE 容器中定义它(包括其 URL、连接数、用户、密码、设置等)。这取决于您的容器。
请阅读以下关于 Tomcat 的说明:http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
【讨论】:
这是配置连接的好方法。内置的 GWT Jetty 服务器,通常用于开发,遗憾的是默认没有配置 JNDI 支持。但是可以这样做,请参阅我对此question (on a somewhat different, but related topic) 的回答。缺点是,实际配置因服务器而异(例如 jetty-env.xml 与 context.xml)。【参考方案2】:我认为配置 XML 和您的 Web 应用程序是一个好主意。每次由新请求启动应用程序时,都会加载配置,并且可以从您创建的任何内部上下文中获得数据库连接信息。
在 IIS 上,这是通过 Web.config 文件的标准方式。
问候
【讨论】:
以上是关于存储数据库配置参数的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章