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程序设计有所帮助。