我正在使用Java开发MongoDB应用程序,但我认为这个问题与网络应用程序的数据存储连接有关。
我喜欢使用四个被调用的顶级软件包来构建所有Web应用程序(我认为这将是不言自明的):
理想情况下,我希望在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();
}
}
这似乎工作正常,但我很想知道人们认为处理这个问题的“最佳”方法,如果有这样的话。
答案 0 :(得分:1)
我建议你可以编写一个java类来建立与数据库的连接。
该方法的参数应该是database name
,password
,host port
和其他必要的凭据。
在需要建立数据库连接的任何地方,您始终可以调用参数化构造函数。这可以是一个模型。
答案 1 :(得分:1)
连接到关系数据库服务器时的经验法则是拥有一个池。例如,如果使用池连接到oracle数据库,则在连接设置时和sql解析时(如果使用绑定变量)方面都会带来一些性能优势。其他关系数据库可能会有所不同,但我的意见是,即使出于某些其他原因,池也是一个好的模式(例如,您可能希望限制与db用户的最大连接数)。您正在使用MongoDB,因此首先要检查MongoDB如何处理连接,如何创建连接等等。我建议使用/构建一个可以实现池逻辑的类,因为它为您提供了将来可能需要的灵活性。看着你的代码似乎你api
DB db=Dao.getDB();
应配对:
Dao.closeDB(DB db);
所以你有机会真正关闭连接或重用它而不影响Dao代码。使用这两种方法可以切换管理连接的方式,而无需重新编码Dao对象
答案 2 :(得分:1)
我得到了一个很好的'本文的解决方案。 http://www.lennartkoopmann.net/post/722935345
编辑由于该链接已失效,此处来自waybackmachine.org
http://web.archive.org/web/20120810083748/http://www.lennartkoopmann.net/post/722935345
主要想法
我发现有趣的是使用静态同步方法返回静态类及其变量的实例。大多数职业开发者可能会发现这一点很明我发现这是管理数据库连接的有用模式。
<强>池强>
Mongo执行自动连接池,因此关键是只使用一个与数据存储区的连接,并让它处理自己的池。
答案 3 :(得分:0)
我认为如果你在DAO中调用一个方法从数据库中获取数据也会更好。如果以这种方式执行此操作,请说您的数据库已更改。如果您获得直接调用数据库查询的数据,则必须编辑许多类。因此,如果您在DAO类本身内部分离db调用方法并调用该方法来获取数据,则更好。