2013-05-11 3 views
0

Я использую базу данных MongoDB с Java-ЭИне открывать новую Connexion по каждому запросу MongoDB драйвера Java

У меня есть объект подключения:

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

Есть ли способ инициализировать соединение с базой данных всего один раз или Идентификатор проверки завершает соединение?

Благодаря

+0

Ваш код не закроет соединение! Я бы начал с создания _major_ рефакторинга вашего дизайна, чтобы вы использовали что-то вроде «Spring» для ввода соединения. Затем используйте «Фильтр», чтобы открывать и закрывать соединения и вводить их туда, где они требуются. Наконец, сохраните соединения в пуле, чтобы вы фактически не открывали и не закрывали соединения каждый раз. –

ответ

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"); 
    //... 

Или перепроектировать классы для разделения прокси базы данных (сохранение соединения, может быть, как singleton) из объектов запроса.

+0

+1 для разделения проблем. –

+0

Это работает за вашу помощь – Ajouve

Смежные вопросы