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");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Spring MVC和MongoDB时,可以使用MongoDB的官方Java驱动程序来连接。下面是一个示例配置: 1. 首先,确保已在项目中添加了MongoDB的Java驱动程序依赖项。可以在Maven的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.8</version> </dependency> ``` 2. 创建一个MongoDB连接的配置类。可以使用Spring的@Configuration注解和@Bean注解来定义连接的配置。例如: ```java import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate; @Configuration public class MongoDBConfig { @Bean public MongoClient mongoClient() { String connectionString = "mongodb://localhost:27017/mydatabase"; MongoClientURI uri = new MongoClientURI(connectionString); return new MongoClient(uri); } @Bean public MongoTemplate mongoTemplate() { return new MongoTemplate(mongoClient(), "mydatabase"); } } ``` 上述代码创建了一个名为`mongoClient`的`MongoClient` bean,它使用`MongoClientURI`来指定MongoDB的连接字符串。然后,它创建一个名为`mongoTemplate`的`MongoTemplate` bean,它使用`mongoClient` bean来连接到MongoDB。 3. 在Spring MVC的配置文件中引入MongoDB配置类。例如,在`web.xml`中添加以下内容: ```xml <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-servlet.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ``` 4. 在Spring MVC的配置文件中引入MongoDB配置类。例如,在`spring-mvc-servlet.xml`中添加以下内容: ```xml <!-- 导入MongoDB配置类 --> <import resource="classpath:com/example/MongoDBConfig.java" /> <!-- 启用MongoDB的注解支持 --> <mongo:repositories base-package="com.example.repository" /> <!-- 其他Spring MVC的配置 --> ... ``` 上述代码通过`<import>`标签引入了之前创建的MongoDB配置类。然后,使用`<mongo:repositories>`标签启用MongoDB的注解支持,指定了存储库接口的基本包。 现在,你可以在Spring MVC的控制器或服务类中注入`MongoTemplate` bean,并使用它来执行对MongoDB的操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Service; @Service public class MyService { private final MongoTemplate mongoTemplate; @Autowired public MyService(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // 在这里编写对MongoDB的操作方法 } ``` 以上是一个简单的Spring MVC和MongoDB连接的示例。你可以根据自己的需求进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值