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)
这个时候将配置信息传递个连接就行