java实现mongodb的数据库连接池
MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展),这里就主要介绍Java通过使用mongo-2.7.3.jar包实现mongodb连接池,具体的java代码实现如下:
数据库连接池配置参数:
/**
*@Description:mongo连接池配置文件
*/
packagecn.lulei.mongo.pool;
publicclassMongoConfig{
privatestaticStringuserName;//用户名
privatestaticStringpwd;//密码
privatestaticString[]host;//主机地址
privatestaticint[]port;//端口地址
privatestaticStringdbName;//数据库名
privatestaticintconnectionsPerHost=20;//每台主机最大连接数
privatestaticintthreadsAllowedToBlockForConnectionMultiplier=10;//线程队列数
privatestaticbooleanauthentication=false;//是否需要身份验证
publicstaticStringgetUserName(){
returnuserName;
}
publicstaticvoidsetUserName(StringuserName){
MongoConfig.userName=userName;
}
publicstaticStringgetPwd(){
returnpwd;
}
publicstaticvoidsetPwd(Stringpwd){
MongoConfig.pwd=pwd;
}
publicstaticString[]getHost(){
returnhost;
}
publicstaticvoidsetHost(String[]host){
MongoConfig.host=host;
}
publicstaticint[]getPort(){
returnport;
}
publicstaticvoidsetPort(int[]port){
MongoConfig.port=port;
}
publicstaticStringgetDbName(){
returndbName;
}
publicstaticvoidsetDbName(StringdbName){
MongoConfig.dbName=dbName;
}
publicstaticintgetConnectionsPerHost(){
returnconnectionsPerHost;
}
publicstaticvoidsetConnectionsPerHost(intconnectionsPerHost){
MongoConfig.connectionsPerHost=connectionsPerHost;
}
publicstaticintgetThreadsAllowedToBlockForConnectionMultiplier(){
returnthreadsAllowedToBlockForConnectionMultiplier;
}
publicstaticvoidsetThreadsAllowedToBlockForConnectionMultiplier(
intthreadsAllowedToBlockForConnectionMultiplier){
MongoConfig.threadsAllowedToBlockForConnectionMultiplier=threadsAllowedToBlockForConnectionMultiplier;
}
publicstaticbooleanisAuthentication(){
returnauthentication;
}
publicstaticvoidsetAuthentication(booleanauthentication){
MongoConfig.authentication=authentication;
}
}
数据库连接池管理类:
/**
*@Description:mongo数据库连接池管理类
*/
packagecn.lulei.mongo.pool;
importjava.util.ArrayList;
importjava.util.List;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.Mongo;
importcom.mongodb.MongoOptions;
importcom.mongodb.ReadPreference;
importcom.mongodb.ServerAddress;
publicclassMongoManager{
privatestaticMongomongo;
privateDBdb;
static{
init();
}
/**
*@paramdbName
*@paramuserName
*@parampwd
*实例化dbName一个DB
*/
publicMongoManager(StringdbName,StringuserName,Stringpwd){
if(dbName==null||"".equals(dbName)){
thrownewNumberFormatException("dbNameisnull");
}
db=mongo.getDB(dbName);
if(MongoConfig.isAuthentication()&&!db.isAuthenticated()){
if(userName==null||"".equals(userName)){
thrownewNumberFormatException("userNameisnull");
}
if(pwd==null||"".equals(pwd)){
thrownewNumberFormatException("pwdisnull");
}
db.authenticate(userName,pwd.toCharArray());
}
}
/**
*使用配置参数实例化
*/
publicMongoManager(){
this(MongoConfig.getDbName(),MongoConfig.getUserName(),MongoConfig.getPwd());
}
/**
*@paramtableName
*@return
*@Description:获取表tableName的链接DBCollection
*/
publicDBCollectiongetDBCollection(StringtableName){
returndb.getCollection(tableName);
}
/**
*@Description:mongo连接池初始化
*/
privatestaticvoidinit(){
if(MongoConfig.getHost()==null||MongoConfig.getHost().length==0){
thrownewNumberFormatException("hostisnull");
}
if(MongoConfig.getPort()==null||MongoConfig.getPort().length==0){
thrownewNumberFormatException("portisnull");
}
if(MongoConfig.getHost().length!=MongoConfig.getPort().length){
thrownewNumberFormatException("host'slengthisnotequalsport'slength");
}
try{
//服务列表
List<ServerAddress>replicaSetSeeds=newArrayList<ServerAddress>();
for(inti=0;i<MongoConfig.getHost().length;i++){
replicaSetSeeds.add(newServerAddress(MongoConfig.getHost()[i],MongoConfig.getPort()[i]));
}
//连接池参数设置
MongoOptionsoptions=newMongoOptions();
options.connectionsPerHost=MongoConfig.getConnectionsPerHost();
options.threadsAllowedToBlockForConnectionMultiplier=MongoConfig.getThreadsAllowedToBlockForConnectionMultiplier();
mongo=newMongo(replicaSetSeeds,options);
//从服务器可读
mongo.setReadPreference(ReadPreference.SECONDARY);
}catch(Exceptione){
e.printStackTrace();
}
}
}
下面通过一个简单的测试类,来看下如何使用这个连接池~
/**
*@Description:mongo测试
*/
packagecn.lulei.mongo.test;
importcn.lulei.mongo.pool.MongoConfig;
importcn.lulei.mongo.pool.MongoManager;
publicclassTest{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
String[]host={"127.0.0.1"};
int[]port={27001};
MongoConfig.setHost(host);
MongoConfig.setPort(port);
MongoConfig.setDbName("novel");
MongoManagermongoManager=newMongoManager();
mongoManager.getDBCollection("chapter");
}
}
在使用上述管理类时,只需要初始化MongoConfig类即可。对类MongoManager的实例话,既可以使用MongoConfig的配置也可以自己通过参数来设置,每次获取DBCollection时,只需要调用getDBCollection(StringtableName)方法即可。
以上就是本文的全部内容,希望本文所述对大家学习java程序设计有所帮助。