在Web应用程序中管理数据库连接的最佳实践

问题描述:

我正在开发一个带有Java的MongoDB应用程序,但我认为这个问题与一般的Web应用程序的数据存储连接有关。在Web应用程序中管理数据库连接的最佳实践

我喜欢结构,这是所谓的四个*包中的所有Web应用程序(我认为这将是自我解释):

  • 控制器
  • 型号
  • 的Util

理想情况下,我想在Dao包中有一个类来处理所有的连接细节。

到目前为止,我已经创建了一个类,看起来像这样:

public class Dao { 

public static Mongo mongo; 
public static DB database; 

public static DB getDB() throws UnknownHostException, MongoException{ 
    mongo = new Mongo("localhost"); 
    database = mongo.getDB("mydb"); 
    return database; 
    } 

public static void closeMongo(){ 
    mongo.close(); 
    } 
} 

我用它在我的代码是这样的

public static void someMethod(String someData){ 
    try { 
     DB db = Dao.getDB(); 
     DBCollection rColl = db.getCollection("mycollection");  
     // perform some database operations 
     Dao.closeMongo(); 

    } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); 
    } 
} 

这似乎很好地工作,但我如果有这样的事情,就要好奇地知道人们认为是处理这个问题的“最佳”方式。

我建议你可以写一个java类来建立与数据库的连接。

该方法的参数应该是database name,password,host port和其他必要的凭证。

您可以在需要建立数据库连接的任何地方随时调用参数化构造函数。这可以是一个模型。

+0

所以你建议每次执行操作时都要建立一个新的连接。我想知道是否有重用连接的方法(这就是为什么我将Dao的方法/参数设置为静态的原因......虽然也许我只是想知道没有目的/不存在的东西 – Ankur

+1

@Ankur:是的确实得到了一个新的连接,这将为连接增加更多的安全性,并且还可以帮助您重新调用新的连接,以便与不同的机器或服务器建立新的连接,只需更改参数并获得连接即可。我觉得是更好的方式来处理MVC中的连接 –

+0

感谢您的解释。 – Ankur

连接到关系数据库服务器时的经验法则是有一个池。例如,如果使用连接池连接到oracle数据库,则在连接建立时间和sql解析时间(如果使用绑定变量)方面都会带来一些性能优势。其他关系型数据库可能会有所不同,但我认为即使出于某种其他原因,池也是一个很好的模式(例如,您可能想限制与db用户的最大连接数)。您正在使用MongoDB,所以首先要检查的是MongoDB如何处理连接,如何强制创建连接等。我建议使用/构建一个可以实现池逻辑的类,因为它为您提供了将来可能需要的灵活性。看你的代码,你好像API

DB db=Dao.getDB(); 

应与配对:

Dao.closeDB(DB db); 

让你有机会真正关闭连接或重新使用它,而不会影响DAO代码。使用这两种方法可以切换管理连接的方式,而无需重新编码Dao对象

我认为如果您调用DAO中的方法从数据库中获取数据,则会更好。如果你这样做,说你的数据库改变了。然后,如果您直接调用db查询获得数据,则必须编辑许多类。所以,如果你将DAO类本身的db调用方法分开,并调用该方法来获取数据,那就更好了。

+0

我不太明白你写的是什么,但是我同意你不会如果db参数(用户名,pwd等)发生改变,就不得不改变许多类 – Ankur

+0

你把“public static void someMethod(String so meData)“?我认为如果你把所有的数据库调用方法放在DAO类中,这是很好的。不仅连接建立 – Krishan

我从这篇文章中找到了一个很好的解决方案。http://www.lennartkoopmann.net/post/722935345

编辑由于该链接是死的,这里有一个从waybackmachine.org

http://web.archive.org/web/20120810083748/http://www.lennartkoopmann.net/post/722935345

重要思想

我发现有趣的是使用一个返回静态同步方法静态类及其变量的实例。大多数专业开发者可能会发现这很明显。我发现这是管理数据库连接的有用模式。

蒙戈进行自动的连接池,所以关键是只使用一个连接到数据存储,让它自己处理池。

+0

链接的方法已死,请更新您的答案 – Balram