MongDB的java连接池

参数配置

connectionsPerHost与目标数据库能够建立的最大connection数量。这些connection用于与数据库之间读写数据。

threadAllowedToBlockForConnectionMultiplier如果当前所有的connection都在使用中,则每个connection上可以有多少个线程排队等待。

connectionsPerHostthreadAllowedToBlockForConnectionMultiplier的关系详解:

connectionsPerHost * threadAllowedToBlockForConnectionMultiplier == 数据库允许的最大并发数量。

connectionsPerHost * threadAllowedToBlockForConnectionMultiplier 一定不能小于当前数据库的并发访问量,否则超出的线程会抛出Exception,导致服务器线程异常中断。

maxWaitTime: 线程等待连接变为可用的最长时间.默认为2分钟. 值为0意味着它不会等待. 负值意味着它将无限期地等待

一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间。比如:当前数据库的连接都在使用中,线程T10尝试访问数据库。此时T10会在某个connection上排队等待。如果超过maxWaitTime都没有获取到这个连接的话。该线程就会抛出Exception(此处为巨坑,一定要注意)。所以maxWaitTime一定要设置的足够大,以免由于排队线程过多造成的访问数据库失败的情况。

maxConnectionIdleTime: 线程池中连接的最大空闲时间, 0标志Udine空闲时间没有限制,超过这个时间会被关闭.

maxConnectionLifeTime: 线程池中连接的最长生存时间. 0表示没有限制. 超过寿命的会被关闭,必要时通过新连接进行替换.

connectTimeout与数据库建立连接的timeout

socketTimeout数据库连接读取和写入数据的timeout

soketKeepAlive保持与数据库之间的连接。如果保持连接,则与数据库的连接一旦建立,就不会关闭,那么后续的数据库访问就不需要重新建立连接了。

autoConnectRetry自动重试与服务器建立连接。

maxAutoConnectRetryTime最多尝试重建连接多长时间。

 

代码实现

import java.util.ArrayList;
import java.util.List;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
 
import com.mongodb.client.MongoDatabase;

public class MongoManager {

    private static MongoClient mongoClient=null;
    
   
    //对mongoClient初始化
    private static void init(){
        //连接池选项
        Builder builder = new MongoClientOptions.Builder();//选项构建者  
        builder.connectionsPerHost(8);//每个地址最大请求数  
        builder.threadsAllowedToBlockForConnectionMultiplier(4);
        builder.connectTimeout(10000);//设置连接超时时间
        builder.maxWaitTime(120000);   //设置最大等待时间   
        builder.socketTimeout(1500);//读取数据的超时时间
            
        MongoClientOptions options = builder.build();
        
        List<ServerAddress> hosts = new ArrayList<ServerAddress>();
	 
        String host = "10.238.103.138";
        int port =27017;
        hosts.add(new ServerAddress(host,port));
        
   
 
		List<MongoCredential> credentials = new ArrayList<MongoCredential>();
 
//		MongoCredential credential = MongoCredential.createCredential("mongodb","test","123".toCharArray());  // 需要验证
//		credentials.add(credential);
     
        mongoClient=new MongoClient(hosts, credentials, options);

}

    
    public static MongoDatabase getDatabase(){
        if(mongoClient==null){
            init();
        }       
        return mongoClient.getDatabase("test");
    }
}

猜你喜欢

转载自blog.csdn.net/lql_h/article/details/88641013