springboot配置mongodb连接池的方法步骤
application.yml配置
mongodb: address:localhost:27017 database:soms username:admin password:123456 #连接池配置 clientName:soms-task#客户端的标识,用于定位请求来源等 connectionTimeoutMs:10000#TCP连接超时,毫秒 readTimeoutMs:15000#TCP读取超时,毫秒 poolMaxWaitTimeMs:3000#当连接池无可用连接时客户端阻塞等待的时长,单位毫秒 connectionMaxIdleTimeMs:60000#TCP连接闲置时间,单位毫秒 connectionMaxLifeTimeMs:120000#TCP连接最多可以使用多久,单位毫秒 heartbeatFrequencyMs:20000#心跳检测发送频率,单位毫秒 minHeartbeatFrequencyMs:8000#最小的心跳检测发送频率,单位毫秒 heartbeatConnectionTimeoutMs:10000#心跳检测TCP连接超时,单位毫秒 heartbeatReadTimeoutMs:15000#心跳检测TCP连接读取超时,单位毫秒 connectionsPerHost:100#每个host的TCP连接数 minConnectionsPerHost:5#每个host的最小TCP连接数 #计算允许多少个线程阻塞等待可用TCP连接时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost,当前配置允许10*20个线程阻塞 threadsAllowedToBlockForConnectionMultiplier:10
用来获取配置参数的类
importlombok.Data;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.stereotype.Component;
importorg.springframework.validation.annotation.Validated;
importjavax.validation.constraints.Min;
importjavax.validation.constraints.NotNull;
importjavax.validation.constraints.Size;
importjava.util.List;
@Data
@Validated
@Component
@ConfigurationProperties(prefix="mongodb")
publicclassMongoClientOptionProperties{
/**基础连接参数*/
privateStringdatabase;
privateStringusername;
privateStringpassword;
@NotNull
privateListaddress;
/**客户端连接池参数*/
@NotNull
@Size(min=1)
privateStringclientName;
/**socket连接超时时间*/
@Min(value=1)
privateintconnectionTimeoutMs;
/**socket读取超时时间*/
@Min(value=1)
privateintreadTimeoutMs;
/**连接池获取链接等待时间*/
@Min(value=1)
privateintpoolMaxWaitTimeMs;
/**连接闲置时间*/
@Min(value=1)
privateintconnectionMaxIdleTimeMs;
/**连接最多可以使用多久*/
@Min(value=1)
privateintconnectionMaxLifeTimeMs;
/**心跳检测发送频率*/
@Min(value=2000)
privateintheartbeatFrequencyMs;
/**最小的心跳检测发送频率*/
@Min(value=300)
privateintminHeartbeatFrequencyMs;
/**计算允许多少个线程阻塞等待时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost*/
@Min(value=1)
privateintthreadsAllowedToBlockForConnectionMultiplier;
/**心跳检测连接超时时间*/
@Min(value=200)
privateintheartbeatConnectionTimeoutMs;
/**心跳检测读取超时时间*/
@Min(value=200)
privateintheartbeatReadTimeoutMs;
/**每个host最大连接数*/
@Min(value=1)
privateintconnectionsPerHost;
/**每个host的最小连接数*/
@Min(value=1)
privateintminConnectionsPerHost;
}
配置类
packagecom.alkin.soms.common.mongo;
importcom.mongodb.MongoClient;
importcom.mongodb.MongoClientOptions;
importcom.mongodb.MongoCredential;
importcom.mongodb.ServerAddress;
importorg.apache.commons.lang.StringUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.NoSuchBeanDefinitionException;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.data.mongodb.MongoDbFactory;
importorg.springframework.data.mongodb.core.MongoTemplate;
importorg.springframework.data.mongodb.core.SimpleMongoDbFactory;
importorg.springframework.data.mongodb.core.convert.*;
importorg.springframework.data.mongodb.core.mapping.MongoMappingContext;
importjava.util.ArrayList;
importjava.util.List;
@Configuration
publicclassMongoConfig{
privatefinalLoggerlog=LoggerFactory.getLogger(MongoConfig.class);
/**
*自定义mongo连接池**@paramproperties
*@return
*/
@Bean
@AutowiredpublicMongoDbFactorymongoDbFactory(MongoClientOptionPropertiesproperties){
//创建客户端参数
MongoClientOptionsoptions=mongoClientOptions(properties);
//创建客户端和Factory
ListserverAddresses=newArrayList<>();
for(Stringaddress:properties.getAddress()){
String[]hostAndPort=address.split(":");
Stringhost=hostAndPort[0];
intport=Integer.parseInt(hostAndPort[1]);
ServerAddressserverAddress=newServerAddress(host,port);
serverAddresses.add(serverAddress);
}
Stringusername=properties.getUsername();
Stringpassword=properties.getPassword();
Stringdatabase=properties.getDatabase();
MongoClientmongoClient;
if(StringUtils.isNotEmpty(username)&&StringUtils.isNotEmpty(password)){
//创建认证客户端
MongoCredentialmongoCredential=MongoCredential.createScramSha1Credential(
username,
database,
password.toCharArray());
mongoClient=newMongoClient(serverAddresses.get(0),mongoCredential,options);
}else{
//创建非认证客户端
mongoClient=newMongoClient(serverAddresses,options);
}
SimpleMongoDbFactorymongoDbFactory=newSimpleMongoDbFactory(mongoClient,database);
log.info("mongodb注入成功");
returnmongoDbFactory;
}
@Bean(name="mongoTemplate")
@Autowired
publicMongoTemplategetMongoTemplate(MongoDbFactorymongoDbFactory){
returnnewMongoTemplate(mongoDbFactory);
}
/**
*mongo客户端参数配置**@return
*/
publicMongoClientOptionsmongoClientOptions(MongoClientOptionPropertiesproperties){
returnMongoClientOptions.builder()
.connectTimeout(properties.getConnectionTimeoutMs())
.socketTimeout(properties.getReadTimeoutMs()).applicationName(properties.getClientName())
.heartbeatConnectTimeout(properties.getHeartbeatConnectionTimeoutMs())
.heartbeatSocketTimeout(properties.getHeartbeatReadTimeoutMs())
.heartbeatFrequency(properties.getHeartbeatFrequencyMs())
.minHeartbeatFrequency(properties.getMinHeartbeatFrequencyMs())
.maxConnectionIdleTime(properties.getConnectionMaxIdleTimeMs())
.maxConnectionLifeTime(properties.getConnectionMaxLifeTimeMs())
.maxWaitTime(properties.getPoolMaxWaitTimeMs())
.connectionsPerHost(properties.getConnectionsPerHost())
.threadsAllowedToBlockForConnectionMultiplier(
properties.getThreadsAllowedToBlockForConnectionMultiplier())
.minConnectionsPerHost(properties.getMinConnectionsPerHost()).build();
}
@Bean
publicMappingMongoConvertermappingMongoConverter(MongoDbFactoryfactory,MongoMappingContextcontext,BeanFactorybeanFactory){
DbRefResolverdbRefResolver=newDefaultDbRefResolver(factory);
MappingMongoConvertermappingConverter=newMappingMongoConverter(dbRefResolver,context);
try{
mappingConverter.setCustomConversions(beanFactory.getBean(MongoCustomConversions.class));
}catch(NoSuchBeanDefinitionExceptionignore){
}
//Don'tsave_classtodao
mappingConverter.setTypeMapper(newDefaultMongoTypeMapper(null));
returnmappingConverter;
}
}
到此这篇关于springboot配置mongodb连接池的方法步骤的文章就介绍到这了,更多相关springboot配置mongodb连接池内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!