java实现mongodb的数据库连接池

网友投稿 239 2023-07-23


java实现mongodb的数据库连接池

MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种jsON的扩展),这里就主要介绍java通过使用mongo-2.7.3.jar包实现mongodb连接池,具体的java代码实现如下:

数据库连接池配置参数:

/**

*@Description: mongo连接池配置文件

*/

package cn.lulei.mongo.pool;

public class MongoConfig {

private static String userName;//用户名

private static String pwd;//密码

private static String[] host;//主机地址

private static int[] port;//端口地址

private static String dbName;//数据库名

private static int connectionsPerHost = 20;//每台主机最大连接数

private static int threadsAllowedToBlockForConnectionMultiplier = 10;//线程队列数

private static boolean authentication = false;//是否需要身份验证

public static String getUserName() {

return userName;

}

public static void segVAaKrLtUserName(String userName) {

MongoConfig.userName = userName;

}

public static String getPwd() {

return pwd;

}

public static void setPwd(String pwd) {

MongoConfig.pwd = pwd;

}

public static String[] getHost() {

return host;

}

public static void setHost(String[] host) {

MongoConfig.host = host;

}

public static int[] getPort() {

return port;

}

public static void setPort(int[] port) {

MongoConfig.port = port;

}

public static String getDbName() {

return dbName;

}

public static void setDbName(String dbName) {

MongoConfig.dbName = dbName;

}

public static int getConnectionsPerHost() {

return connectionsPerHost;

}

public static void setConnectionsPerHost(int connectionsPerHost) {

MongoConfig.connectionsPerHost = connectionsPerHost;

}

public static int getThreadsAllowedToBlockForConnectionMultiplier() {

return threadsAllowedToBlockForConnectionMultiplier;

}

public static void setThreadsAllowedToBlockForConnectionMultiplier(

int threadsAllowedToBlockForConnectionMultiplier) {

MongoConfig.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier;

}

public static boolean isAuthentication() {

return authentication;

}

public static void setAuthentication(boolean authentication) {

MongoConfig.authentication = authentication;

}

}

数据库连接池管理类:

/**

*@Description: mongo数据库连接池管理类

*/

package cn.lulei.mongo.pool;

import java.util.ArrayList;

import java.util.List;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.Mongo;

import com.mongodb.MongoOptions;

import com.mongodb.ReadPreference;

import com.mongodb.ServerAddress;

public class MongoManager {

private static Mongohttp:// mongo;

private DB db;

static{

init();

}

/**

* @param dbName

* @param userName

* @param pwd

* 实例化dbName一个DB

*/

public MongoManager(String dbName, String userName, String pwd) {

if (dbName == null || "".equals(dbName)) {

throw new NumberFormatException("dbName is null");

}

db = mongo.getDB(dbName);

if(MongoConfig.isAuthentication() && !db.isAuthenticated()){

if (userName == null || "".equals(userName)) {

throw new NumberFormatException("userName is null");

}

if (pwd == null || "".equals(pwd)) {

throw new NumberFormatException("pwd is null");

}

db.authenticate(userName, pwd.toCharArray());

}

}

/**

* 使用配置参数实例化

*/

public MongoManager() {

this(MongoConfig.getDbName(), MongoConfig.getUserName(), MongoConfig.getPwd());

}

/**

* @param tableName

* @return

* @Description: 获取表tableName的链接DBCollection

*/

public DBCollection getDBCollection(String tableName) {

return db.getCollection(tableName);

}

/**

* @Description: mongo连接池初始化

*/

private static void init() {

if (MongoConfig.getHost() == null || MongoConfig.getHost().length == 0) {

throw new NumberFormatException("host is null");

}

if (MongoConfig.getPort() == null || MongoConfig.getPort().length == 0) {

throw new NumberFormatException("port is null");

}

if (MongoConfig.getHost().length != MongoConfig.getPort().length) {

throw new NumberFormatException("host's length is not equals port's length");

}

try {

//服务列表

List replicaSetSeeds = new ArrayList();

for (int i = 0; i < MongoConfig.getHost().length; i++) {

replicaSetSeeds.add(new ServerAddress(MongoConfig.getHost()[i], MongoConfig.getPort()[i]));

}

//连接池参数设置

MongoOptions options = new MongoOptions();

options.connectionsPerHost = MongoConfig.getConnectionsPerHost();

options.threadsAllowedToBlockForConnectionMultiplier = MongoConfig.getThreadsAllowedToBlockForConnectionMultiplier();

mongo = new Mongo(replicaSetSeeds, options);

//从服务器可读

mongo.sethttp://ReadPreference(ReadPreference.SECONDARY);

} catch (Exception e){

e.printStackTrace();

}

}

}

下面通过一个简单的测试类,来看下如何使用这个连接池~

/**

*@Description:mongo测试

*/

package cn.lulei.mongo.test;

import cn.lulei.mongo.pool.MongoConfig;

import cn.lulei.mongo.pool.MongoManager;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String[] host = {"127.0.0.1"};

int[] port = {27001};

MongoConfig.setHost(host);

MongoConfig.setPort(port);

MongoConfig.setDbName("novel");

MongoManager mongoManager = new MongoManager();

mongoManager.getDBCollection("chapter");

}

}

在使用上述管理类时,只需要初始化MongoConfig类即可。对类MongoManager的实例话,既可以使用MongoConfig的配置也可以自己通过参数来设置,每次获取DBCollection 时,只需要调用getDBCollection(String tableName)方法即可。

以上就是本文的全部内容,希望本文所述对大家学习java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现屏蔽词功能
下一篇:Underscore源码分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~