MongoDB连接池

MongoDB的从最开始的Mongo连接到------------>new MongoClient连接.到现在3.7版本的MongoClients.create连接...

但是连接池也发生变化,这里就简单梳理一下三种连接的方式

 

以下的连接都是不完善的....每个都有自己的习惯,

比如我想连接的时候顺便连接mongodb的时候要连接数据库和集合,这要进行判断处理...校验是否是该集合和数据库...是否为空

这些都根据自己的实际情况而定.....我只是讲述三种连接池....侧重点在于参数的配置

第一种:Mongo--->这种已经被淘汰

package com.gaosheng.mongodb.java._day01;

import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;

//mongo
public class Connection_Mongo {
	private static Mongo mongo = null;

	private Connection_Mongo() {
	}

	public static Mongo getConnection() {
		// 单利模式.双重锁机制
		if (mongo == null) {
			synchronized (Mongo.class) {
				if (mongo == null) {
					mongo = new Mongo("localhost", 27017);
					MongoOptions mongoOptions = mongo.getMongoOptions();
					// 连接池配置
					// 连接数量
					mongoOptions.connectionsPerHost = 34;
					// 队列
					mongoOptions.threadsAllowedToBlockForConnectionMultiplier = 50;
					// 连接时间
					mongoOptions.connectTimeout = 5000;
					// 最大等待时间
					mongoOptions.maxWaitTime = 2000;
				}
			}
		}
		return mongo;

	}
	public static void closeMongoCollection(Mongo mongo) {
		if (mongo != null) {
			mongo.close();
		}
	}
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		Mongo connection = Connection_Mongo.getConnection();
		DBCollection collection = connection.getDB("my_mongoose").getCollection("emps");
		DBCursor find = collection.find();
		while (find.hasNext()) {
			System.out.println(find.next());
		}
	}
}

 

第二种 :new MongoClient()

package com.gaosheng.mongodb.java._day01;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;

public class Connection_MongoClient {
	private static MongoClient mongoClient = null;

	private Connection_MongoClient() {
	}

	@SuppressWarnings("resource")
	public static MongoClient getMongoClient() {
		if (mongoClient == null) {
			synchronized (MongoClient.class) {
				if (mongoClient == null) {
					ServerAddress serverAddress = new ServerAddress("localhost", 27017);
					mongoClient = new MongoClient(serverAddress);
					MongoClientOptions options = MongoClientOptions.builder().maxWaitTime(2000)
							.maxConnectionLifeTime(2000).maxConnectionIdleTime(2000).build();
				}
			}
		}
		return mongoClient;
	}
	public static void closeMongoCollection(MongoClient mongoClient) {
		if (mongoClient != null) {
			mongoClient.close();
		}
	}

	public static void main(String[] args) {
		MongoClient mongoClient2 = Connection_MongoClient.getMongoClient();
		MongoCollection<Document> collection = mongoClient2.getDatabase("my_mongoose").getCollection("emps");
		FindIterable<Document> find = collection.find();
		MongoCursor<Document> iterator = find.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

第三种:MongoClients.create();

package com.gaosheng.mongodb.java._day01;

import org.bson.Document;

import com.mongodb.Block;
import com.mongodb.ConnectionString;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;

public class Connection_MongoCleints {
	private static MongoClient mongoClient = null;

	private Connection_MongoCleints() {
	}

	public static MongoClient getMongClients() {
		if (mongoClient == null) {
			synchronized (MongoClient.class) {
				if (mongoClient == null) {
					ConnectionString connectionString = new ConnectionString(
							"mongodb://localhost:27017/my_mongoose.emps?maxIdleTimeMS=2000&maxLifeTimeM=2000S&maxPoolSize=500&"
									+ "waitQueueMultiple=30&waitQueueTimeoutMS=2000");
					mongoClient = MongoClients.create(connectionString);
				}
			}
		}
		return mongoClient;
	}
	public static void closeMongoCollection(MongoClient mongoClient) {
		if (mongoClient != null) {
			mongoClient.close();
		}
	}

	public static void main(String[] args) {
		// 获取连接
		MongoCollection<Document> collection = Connection_MongoCleints.getMongClients().getDatabase("my_mongoose")
				.getCollection("emps");
		// 第一种迭代数据使用iterator进行迭代数据
		/*
		 * // 查找数据 FindIterable<Document> find = collection.find(); // 迭代数据
		 * MongoCursor<Document> iterator = find.iterator(); while
		 * (iterator.hasNext()) { System.out.println(iterator.next()); }
		 */

		// 第二种使用forEach进行迭代数据
		collection.find().forEach(new Block<Document>() {
			@Override
			public void apply(Document doc) {
				System.out.println(doc.toJson());
			}
		});
	}
}

 

前几天写的时候忘记加上关闭连接了..已经添加上了

 

 

以上就是三种简单的配置..注重是参数的配置,并不是进行完善......

 

如果想做的更好,可以传递自己的端口,地址密码,参数配置,数据库,集合等等很多参数,只要自己一个方法,传递值的时候需要获取到值的需要进行值的校验----->可以这样又存在弊端,,,如果我很多参数,,这不是不太好了?------>我们可以写成一个配置文件,将所有的配置信息写入配置文件,,我们只要加载配置文件即可

 

可是配置文件该如何加载进里面:

建议定义个static{}静态代码块..将所有的配置都放在静态代码块中一次性加载完毕,,到下面获取连接(eg:getconnection)

这个时候将配置信息传递个连接就行

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值