【接口类定义】 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();
}
}
}