0

java-ee で mongoDb データベースを使用しています

私は自分の接続オブジェクトを持っています:

public class MongoDb {

static Mongo m;
DB db;
DBCollection coll;

public MongoDb(String collection){
    m = null;
    try {
        if(m==null){
            m = new Mongo( "127.0.0.1" );
        }
        db = m.getDB( "game" );
        coll = db.getCollection(collection);
    } catch (UnknownHostException e) {
        System.out.println("Database connexion error");
        e.printStackTrace();
    }
}

public void save(BasicDBObject bdbo){
    coll.insert(bdbo);
}

public void update(BasicDBObject search, BasicDBObject update){
    coll.update(search, update);
}

public void remove(BasicDBObject bdbo){
    coll.remove(bdbo);
}

public long count(){
    long nb = coll.getCount();
    return nb;
}

public List<DBObject> getAll(){
    List<DBObject> list = new ArrayList<DBObject>();
    DBCursor cursor = coll.find().limit(100);
    try {
       while(cursor.hasNext()) {
           list.add(cursor.next());
       }
    } finally {
       cursor.close();
    }
    return list;
}

public List<DBObject> getAll(String key, String value){
    List<DBObject> list = new ArrayList<DBObject>();
    BasicDBObject q = new BasicDBObject();
    q.append(key, Pattern.compile(value, Pattern.CASE_INSENSITIVE));
    DBCursor cursor = coll.find(q).limit(100);
    try {
       while(cursor.hasNext()) {
           list.add(cursor.next());
       }
    } finally {
       cursor.close();
    }
    return list;
}

public DBObject findOne(BasicDBObject bdbo){
    DBObject obj = coll.findOne(bdbo);
    return obj;
}
}

しかし、リクエストを行うたびに新しい接続が作成され、mongodb には接続の最大数があるため、リクエストの最大数に達した場合は、mongodb を再起動する必要があります。

データベース接続を 1 回だけ初期化する方法、または接続の終了 ID をテストする方法はありますか?

ありがとう

4

1 に答える 1

2

はい、クエリ オブジェクトの作成時に接続をリセットしないでください。次のようにします。

public class MongoDb {

static Mongo m = new Mongo("127.0.0.1");
DB db;
DBCollection coll;

public MongoDb(String collection){
    db = m.getDB( "game" );
    //...

または、クラスを再設計して、データベース プロキシ (おそらくシングルトンとして接続を格納) をクエリ オブジェクトから分離します。

于 2013-05-11T15:37:11.833 に答える