在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
和其他必要的凭证。
您可以在需要建立数据库连接的任何地方随时调用参数化构造函数。这可以是一个模型。
连接到关系数据库服务器时的经验法则是有一个池。例如,如果使用连接池连接到oracle数据库,则在连接建立时间和sql解析时间(如果使用绑定变量)方面都会带来一些性能优势。其他关系型数据库可能会有所不同,但我认为即使出于某种其他原因,池也是一个很好的模式(例如,您可能想限制与db用户的最大连接数)。您正在使用MongoDB,所以首先要检查的是MongoDB如何处理连接,如何强制创建连接等。我建议使用/构建一个可以实现池逻辑的类,因为它为您提供了将来可能需要的灵活性。看你的代码,你好像API
DB db=Dao.getDB();
应与配对:
Dao.closeDB(DB db);
让你有机会真正关闭连接或重新使用它,而不会影响DAO代码。使用这两种方法可以切换管理连接的方式,而无需重新编码Dao对象
我从这篇文章中找到了一个很好的解决方案。http://www.lennartkoopmann.net/post/722935345
编辑由于该链接是死的,这里有一个从waybackmachine.org
http://web.archive.org/web/20120810083748/http://www.lennartkoopmann.net/post/722935345
重要思想
我发现有趣的是使用一个返回静态同步方法静态类及其变量的实例。大多数专业开发者可能会发现这很明显。我发现这是管理数据库连接的有用模式。
池
蒙戈进行自动的连接池,所以关键是只使用一个连接到数据存储,让它自己处理池。
链接的方法已死,请更新您的答案 – Balram
所以你建议每次执行操作时都要建立一个新的连接。我想知道是否有重用连接的方法(这就是为什么我将Dao的方法/参数设置为静态的原因......虽然也许我只是想知道没有目的/不存在的东西 – Ankur
@Ankur:是的确实得到了一个新的连接,这将为连接增加更多的安全性,并且还可以帮助您重新调用新的连接,以便与不同的机器或服务器建立新的连接,只需更改参数并获得连接即可。我觉得是更好的方式来处理MVC中的连接 –
感谢您的解释。 – Ankur