【接口類定義】 java
[java] view plaincopy mongodb
/** 數據庫
* 項目名:SpiderCrawler 安全
* 文件名:MongoDBDao.java 多線程
* 描述:TODO(用一句話描述該文件作什麼) ide
*/ 函數
package com.newsTest.dao; ui
import java.util.ArrayList; spa
import com.mongodb.DB; //導入數據庫DB.net
import com.mongodb.DBCollection; //導入集合DBCollection
import com.mongodb.DBObject; //導入對象DBObject
/**
* 類名: MongoDBDao
* 包名: com.newsTest.dao
* 描述: TODO(這裏用一句話描述這個類的做用)
*/
public interface MongoDBDao {
/**
* 方法名:getDb
* 描述:獲取指定的mongodb數據庫
* @param dbName
* @return
*/
public DB getDb(String dbName);
/**
* 方法名:getCollection
* 描述:獲取指定mongodb數據庫的collection集合
* @param dbName 數據庫名
* @param collectionName 數據庫集合
* @return
*/
public DBCollection getCollection(String dbName, String collectionName);
/**
* 方法名:inSert
* 描述:向指定的數據庫中添加給定的keys和相應的values
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean inSert(String dbName, String collectionName, String[] keys, Object[] values);
/**
*
* 方法名:delete
* 做者:zhouyh
* 建立時間:2014-8-30 下午04:09:00
* 描述:刪除數據庫dbName中,指定keys和相應values的值
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean delete(String dbName, String collectionName, String[] keys, Object[] values);
/**
* 方法名:find
* 描述:從數據庫dbName中查找指定keys和相應values的值
* @param dbName
* @param collectionName
* @param keys
* @param values
* @param num
* @return
*/
public ArrayList<DBObject> find(String dbName, String collectionName, String[] keys, Object[] values, int num);
/**
* 方法名:update
* 做者:zhouyh
* 建立時間:2014-8-30 下午04:17:54
* 描述:更新數據庫dbName,用指定的newValue更新oldValue
* @param dbName
* @param collectionName
* @param oldValue
* @param newValue
* @return
*/
public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);
/**
* 方法名:isExit
* 描述:判斷給定的keys和相應的values在指定的dbName的collectionName集合中是否存在
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean isExit(String dbName, String collectionName, String key, Object value);
}
【藉口類實現】
[java] view plaincopy
/**
* 項目名:SpiderCrawler
* 文件名:MongoDBDaoImpl.java
* 描述:TODO(用一句話描述該文件作什麼)
*/
package com.newsTest.dao.impl;
import java.net.UnknownHostException; //導入URL的相關Exception的jar包
import java.util.ArrayList;
import com.newsTest.dao.MongoDBDao; //導入接口類的定義
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor; //導入遊標
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoException;
import com.mongodb.WriteResult;
/**
* 類名: MongoDBDaoImpl
* 包名: com.newsTest.dao.impl
* 描述: TODO(這裏用一句話描述這個類的做用)
*/
public class MongoDBDaoImpl implements MongoDBDao{
/*MongoDBDao是前面本身定義的接口,而非系統自帶*/
/**
* MongoClient的實例表明數據庫鏈接池,是線程安全的,能夠被多線程共享,客戶端在多線程條件下僅維持 一個實例便可
* Mongo是非線程安全的,目前mongodb API中已經建議用MongoClient替代Mongo
*/
private MongoClient mongoClient = null;
/**
* 私有的構造函數
*/
private MongoDBDaoImpl(){
if(mongoClient == null){
MongoClientOptions.Builder build = new MongoClientOptions.Builder();
build.connectionsPerHost(50);
//與目標數據庫可以創建的最大connection數量爲50
build.autoConnectRetry(true);
//自動重連數據庫啓動
build.threadsAllowedToBlockForConnectionMultiplier(50);
//若是當前全部的connection都在使用中,則每一個connection上能夠有50個線程排隊等待
/*
* 一個線程訪問數據庫的時候,在成功獲取到一個可用數據庫鏈接以前的最長等待時間爲2分鐘
* 這裏比較危險,若是超過maxWaitTime都沒有獲取到這個鏈接的話,該線程就會拋出Exception
* 故這裏設置的maxWaitTime應該足夠大,以避免因爲排隊線程過多形成的數據庫訪問失敗
*/
build.maxWaitTime(1000*60*2);
build.connectTimeout(1000*60*1); //與數據庫創建鏈接的timeout設置爲1分鐘
MongoClientOptions myOptions = build.build();
try {
//數據庫鏈接實例
mongoClient = new MongoClient("127.0.0.1", myOptions);
} catch (UnknownHostException e) {
// TODO 這裏寫異常處理的代碼
e.printStackTrace();
} catch (MongoException e){
e.printStackTrace();
}
}
}