SpringBoot整合mongoDB并配置连接池
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!” />
=================================================================
org.springframework.boot
spring-boot-starter-data-mongodb
implementation ‘org.springframework.boot:spring-boot-starter-data-mongodb’
=================================================================
spring.application.name=springboot-mongo
#基础连接参数
#要连接的数据库
mongodb.database=nobody
#用户名
mongodb.username=
#密码
mongodb.password=
#IP和端口(host:port),例如127.0.0.1:27017。集群模式用,分隔开,例如host1:port1,host2:port2
mongodb.address=127.0.0.1:27017
#设置认证数据库,如果有的话
mongodb.authenticationDatabase=
客户端连接池参数
#客户端的标识,用于定位请求来源等,一般用程序名
mongodb.clientName=${spring.application.name}
#TCP(socket)连接超时时间,毫秒
mongodb.connectionTimeoutMs=5000
#TCP(socket)连接闲置时间,毫秒
mongodb.maxConnectionIdleTimeMs=60000
#TCP(socket)连接最多可以使用多久,毫秒
mongodb.maxConnectionLifeTimeMs=300000
#TCP(socket)读取超时时间,毫秒
mongodb.readTimeoutMs=15000
#当连接池无可用连接时客户端阻塞等待的最大时长,毫秒
mongodb.maxWaitTimeMs=5000
#心跳检测发送频率,毫秒
mongodb.heartbeatFrequencyMs=20000
#最小的心跳检测发送频率,毫秒
mongodb.minHeartbeatFrequencyMs=8000
#心跳检测连接超时时间,毫秒
mongodb.heartbeatConnectionTimeoutMs=10000
#心跳检测读取超时时间,毫秒
mongodb.heartbeatReadTimeoutMs=15000
#线程池允许的最大连接数
mongodb.connectionsPerHost=100
#线程池空闲时保持的最小连接数
mongodb.minConnectionsPerHost=20
#计算允许多少个线程阻塞等待时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*maxConnectionsPerHost
mongodb.threadsAllowedToBlockForConnectionMultiplier=10
===========================================================================
注意:项目中使用了lombok依赖,这样可以减少写getter、Setter等方法。
package com.nobody.mongo.config;
import com.mongodb.*;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.*;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
/**
-
@Description mongo配置类
-
@Author Mr.nobody
-
@Date 2020/11/7
-
@Version 1.0
*/
@Configuration
// 将带有@ConfigurationProperties注解的类注入为Spring容器的Bean,
// 任何被@ConfigurationProperties注解的beans将自动被Environment属性配置。
@EnableConfigurationProperties(MongoConfig.MongoClientOptionProperties.class)
public class MongoConfig {
/**
-
此Bean也是可以不显示定义的,如果我们没有显示定义生成MongoTemplate实例,
-
SpringBoot利用我们配置好的MongoDbFactory在配置类中生成一个MongoTemplate,
-
之后我们就可以在项目代码中直接@Autowired了。因为用于生成MongoTemplate
-
的MongoDbFactory是我们自己在MongoConfig配置类中生成的,所以我们自定义的连接池参数也就生效了。
-
@param mongoDbFactory mongo工厂
-
@param converter 转换器
-
@return MongoTemplate实例
*/
@Bean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MappingMongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
// 设置读从库优先
mongoTemplate.setReadPreference(ReadPreference.secondaryPreferred());
return mongoTemplate;
}
/**
-
转换器
-
MappingMongoConverter可以自定义mongo转换器,主要自定义存取mongo数据时的一些操作,例如 mappingConverter.setTypeMapper(new
-
DefaultMongoTypeMapper(null)) 方法会将mongo数据中的_class字段去掉。
-
@param factory mongo工厂
-
@param context 上下文
-
@param conversions 自定义转换器
-
@return 转换器对象
*/
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context,
MongoCustomConversions conversions) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
mappingConverter.setCustomConversions(conversions);
// remove _class field
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}
/**
-
自定义mongo连接池
-
@param properties 属性配置类
-
@return MongoDbFactory对象
*/
@Bean
public MongoDbFactory mongoDbFactory(MongoClientOptionProperties properties) {
MongoClient mongoClient;
// 创建客户端参数
MongoClientOptions mongoClientOptions = mongoClientOptions(properties);
// 解析获取mongo服务地址
List serverAddressList = getServerAddress(properties.getAddress());
// 创建认证
MongoCredential mongoCredential = getCredential(properties);
// 创建客户端
if (null == mongoCredential) {
mongoClient = new MongoClient(serverAddressList, mongoClientOptions);
} else {
mongoClient = new MongoClient(serverAddressList, mongoCredential, mongoClientOptions);
}
return new SimpleMongoDbFactory(mongoClient, properties.getDatabase());
}
/**
-
创建认证
-
@param properties 属性配置类
-
@return 认证对象
*/
private MongoCredential getCredential(MongoClientOptionProperties properties) {
if (!StringUtils.isEmpty(properties.getUsername()) && !StringUtils.isEmpty(properties.getPassword())) {
// 没有专用认证数据库则取当前数据库
String database = StringUtils.isEmpty(properties.getAuthenticationDatabase()) ?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)