存储数据库配置参数的最佳方式?

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 文件的标准方式。

问候

【讨论】:

以上是关于存储数据库配置参数的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

存储可从管理员界面配置的应用程序设置的最佳方式?

使用 Firestore 在 Flutter 中加载配置文件数据的最佳方式是啥?

在 Rails 中存储应用程序特定配置的最佳方式是啥?

应用程序配置或应用程序选项设置的最佳表设计?

哪种是存储 Firebase 远程配置默认值的最佳方式?

如何在 EAR 或 WAR 之外存储 Java EE 配置参数?