当前位置: 首页 > news >正文

SpringBoot整合MongoDB连接池(含源码)

💡版本依赖

jdk 17

SpringBoot 3.1.0

Mongo 6.0.8

mybatis-plus 2.0.2

💡环境准备

🌵MongoDB安装

安装教程请查看:一文搞定(linux+windows+docker)安装MongoDB

🌵导入依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version>
</parent><groupId>com.example</groupId>
<artifactId>springboot-mongo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mongo-demo</name>
<description>springboot-mongo-demo</description>
<properties><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongo --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>2.0.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.15.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency>
</dependencies>

🌵application.yml配置

server:port: 8080  # 设置访问端口spring:data:mongodb:maxSize: 100 # 允许的最大连接数。这些连接在空闲时将保留在池中。一旦池耗尽,任何需要连接的操作都将阻塞等待可用连接 默认: 100minSize: 10 # 最小连接数。这些连接在空闲时将保留在池中,并且池将确保它至少包含这个最小数量 默认: 0maxConnectionLifeTime: 0 # 池连接可以存活的最长时间。零值表示寿命没有限制。超过其生命周期的池连接将被关闭并在必要时由新连接替换maxConnectionIdleTime: 5 # 池连接的最大空闲时间。零值表示对空闲时间没有限制。超过其空闲时间的池连接将被关闭并在必要时由新连接替换maxWaitTime: 60000 # 默认最大连接时间120s;one:uri: mongodb://47.98.123.147:27017/${spring.data.mongodb.one.database}database: mongo_db# 上方为明确指定某个数据的用户进行连接# 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证# admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1two:uri: mongodb://47.98.123.147:27017/${spring.data.mongodb.two.database}database: mongo_db# 上方为明确指定某个数据的用户进行连接# 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证# admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1

参数说明:

maxSize: 100 # 允许的最大连接数。这些连接在空闲时将保留在池中。一旦池耗尽,任何需要连接的操作都将阻塞等待可用连接 默认: 100
minSize: 10 # 最小连接数。这些连接在空闲时将保留在池中,并且池将确保它至少包含这个最小数量 默认: 0
maxConnectionLifeTime: 0 # 池连接可以存活的最长时间。零值表示寿命没有限制。超过其生命周期的池连接将被关闭并在必要时由新连接替换
maxConnectionIdleTime: 5 # 池连接的最大空闲时间。零值表示对空闲时间没有限制。超过其空闲时间的池连接将被关闭并在必要时由新连接替换
maxWaitTime: 60000 # 默认最大连接时间120s;

💡使用实例

🌵MongoConfiguration

/*** @author: coderJim* @description: mongodb连接池配置*/
@Configuration
public class MongoConfiguration {@Value("${spring.data.mongodb.maxSize}")private int maxSize;@Value("${spring.data.mongodb.minSize}")private int minSize;@Value("${spring.data.mongodb.maxConnectionLifeTime}")private int maxConnectionLifeTime;@Value("${spring.data.mongodb.maxConnectionIdleTime}")private int maxConnectionIdleTime;@Value("${spring.data.mongodb.maxWaitTime}")private int maxWaitTime;@Bean@Primary@ConfigurationProperties(prefix = "spring.data.mongodb.one")public MongoProperties masterMongoProperties() {return new MongoProperties();}@Bean@ConfigurationProperties(prefix = "spring.data.mongodb.two")public MongoProperties twoMongoProperties() {return new MongoProperties();}/*** 连接池配置1** @return*/@Bean@Primarypublic MongoDatabaseFactory mongoDatabaseFactory(@Qualifier("masterMongoProperties") MongoProperties properties) {return getSimpleMongoClientDatabaseFactory(properties);}/*** 连接池配置2** @return*/@Beanpublic MongoDatabaseFactory twoMongoDatabaseFactory(@Qualifier("twoMongoProperties") MongoProperties properties) {return getSimpleMongoClientDatabaseFactory(properties);}private SimpleMongoClientDatabaseFactory getSimpleMongoClientDatabaseFactory(MongoProperties properties){MongoClientSettings.Builder builder = MongoClientSettings.builder();builder.applyConnectionString(new ConnectionString(properties.getUri()));builder.applyToConnectionPoolSettings(b -> {b.maxSize(maxSize);b.minSize(minSize);b.maxConnectionLifeTime(maxConnectionLifeTime, TimeUnit.SECONDS);b.maxConnectionIdleTime(maxConnectionIdleTime, TimeUnit.MINUTES);b.maxWaitTime(maxWaitTime, TimeUnit.MILLISECONDS);});MongoClient mongoClient = MongoClients.create(builder.build(), SpringDataMongoDB.driverInformation());return new SimpleMongoClientDatabaseFactory(mongoClient, properties.getDatabase());}@Bean@Primarypublic MongoTemplate mongoTemplate(@Qualifier("mongoDatabaseFactory") MongoDatabaseFactory mongoDatabaseFactory) {return getMongoTemplate(mongoDatabaseFactory);}@Beanpublic MongoTemplate twoMongoTemplate(@Qualifier("twoMongoDatabaseFactory") MongoDatabaseFactory mongoDatabaseFactory) {return getMongoTemplate(mongoDatabaseFactory);}private MongoTemplate getMongoTemplate(MongoDatabaseFactory mongoDatabaseFactory){MongoTemplate mongoTemplate = new MongoTemplate(mongoDatabaseFactory);//去除保存实体时,spring data mongodb 自动添加的_class字段MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();mongoMapping.setTypeMapper(new DefaultMongoTypeMapper(null));mongoMapping.afterPropertiesSet();return mongoTemplate;}
}

🌵User

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {private static final long serialVersionUID = -4328989516223829865L;/*** 用户ID*/private String id;/*** 用户账号*/private String userName;/*** 密码*/private String password;}

🌵MongoController

/*** mongo pool 实列* @author coderJim* @date 2023-05-15 00:03*/
@RestController
@RequestMapping("/mongopool")
public class MongoController {@Autowiredprivate MongoTemplate mongoTemplate;@Qualifier("twoMongoTemplate")@Autowiredprivate MongoTemplate twoMongoTemplate;/*** 新增*/@ResponseBody@GetMapping("/add")public void add(){User user = User.builder().id(UUID.randomUUID().toString()).userName("aa").password("111111").build();mongoTemplate.insert(user);User user2 = User.builder().id(UUID.randomUUID().toString()).userName("bb").password("2222").build();twoMongoTemplate.insert(user2);}
}

🎁如果需要完整源码请关注公众号"架构殿堂" ,回复 "SpringBoot+MongoDB配置连接池"即可获得

🔔写在最后

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

相关文章:

SpringBoot整合MongoDB连接池(含源码)

&#x1f4a1;版本依赖 jdk 17 SpringBoot 3.1.0 Mongo 6.0.8 mybatis-plus 2.0.2 &#x1f4a1;环境准备 &#x1f335;MongoDB安装 安装教程请查看&#xff1a;一文搞定(linuxwindowsdocker)安装MongoDB &#x1f335;导入依赖 <parent><groupId>org.sp…...

[oeasy]python0082_[趣味拓展]控制序列_清屏_控制输出位置_2J

光标位置 回忆上次内容 上次了解了键盘演化的过程 ESC 从 组合键到 独立按键 ESC的作用 是 进入 控制序列配置 控制信息控制信息 \033[y;xH 设置光标位置\033[2J 清屏 这到底怎么控制&#xff1f;&#xff1f;&#xff1f;&#x1f914;谁来实现这些功能&#xff1f; 控制…...

Zookeeper+kafka

目录 1. Zookeeper定义 2. Zookeeper工作机制 3. Zookeeper特点 4. Zookeeper数据结构 5. Zookeeper应用场景 5.1 统一命名服务 5.2 统一配置管理 5.3 统一集群管理 5.4 服务器动态上下线 5.5 软负载均衡 6. Zookeeper 选举机制 6.1 第一次启动选举机制 6.2 非第一…...

Gpt微信小程序搭建的前后端流程 - 前端小程序部分-1.基础页面框架的静态设计(二)

Gpt微信小程序搭建的前后端流程 - 前端小程序部分-1.基础页面框架的静态设计(二) 在开始这个专栏&#xff0c;我们需要找一个小程序为参考&#xff0c;参考和仿照其界面&#xff0c;聊天交互模式。 这里参考小程序-小柠AI智能聊天&#xff0c;可自行先体验。 该小程序主要提供了…...

Flask进阶:构建RESTful API和数据库交互

在初级教程中&#xff0c;我们已经介绍了如何使用Flask构建基础的Web应用。在本篇中级教程中&#xff0c;我们将学习如何用Flask构建RESTful API&#xff0c;以及如何使用Flask-SQLAlchemy进行数据库操作。 一、构建RESTful API REST&#xff08;Representational State Tran…...

6.9(Java)二叉搜索树

1.我的代码: public class BinarySearchTree {class TreeNode {public int key;public TreeNode left;public TreeNode right;public TreeNode(int key) {this.key key;}}public TreeNode root; // 根节点// 插入一个元素,注意&#xff0c;不能插入重复的值&#xff0c;如…...

洛谷P2256 一中校运会之百米跑

题目背景 在一大堆秀恩爱的 ** 之中&#xff0c;来不及秀恩爱的苏大学神踏着坚定&#xff08;&#xff1f;&#xff09;的步伐走向了 100 100 100 米跑的起点。这时苏大学神发现&#xff0c;百米赛跑的参赛同学实在是太多了&#xff0c;连体育老师也忙不过来。这时体育老师发…...

python-opencv对极几何 StereoRectify

OpenCV如何正确使用stereoRectify函数 函数介绍 用于双目相机的立体校正环节中&#xff0c;这里只谈谈这个函数怎么使用&#xff0c;参数具体指哪些函数参数 随便去网上一搜或者看官方手册就能得到参数信息&#xff0c;但是&#xff01;&#xff01;相对关系非常容易出错&…...

pom文件---maven

027-Maven 命令行-实验四-生成 Web 工程-执行生成_ev_哔哩哔哩_bilibili 27节.后续补充 一.maven下载安装及配置 1)maven下载 2) settings文件配置本地仓库 3)settings配置远程仓库地址 4)配置maven工程的基础JDK版本 5)确认JDK环境变量配置没问题,配置maven的环境变量 验证…...

界面控件DevExpress.Drawing图形库早期增强功能分享

众所周知&#xff0c;DevExpress在v22.2发布周期中引入了全新的DevExpress.Drawing图形库&#xff08;并且已经在随后的小更新中引入了一系列增强功能&#xff09;。 在这篇博文中&#xff0c;我们将总结在DevExpress v23.1中解决的一些问题&#xff0c;以及在EAP构建中为以下…...

Semantic Kernel 入门系列:Connector连接器

当我们使用Native Function的时候&#xff0c;除了处理一些基本的逻辑操作之外&#xff0c;更多的还是需要进行外部数据源和服务的对接&#xff0c;要么是获取相关的数据&#xff0c;要么是保存输出结果。这一过程在Semantic Kernel中可以被归类为Connector。 Connector更像是…...

Maven介绍-下载-安装-使用-基础知识

Maven介绍-下载-安装-使用-基础知识 Maven的进阶高级用法可查看这篇文章&#xff1a; Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…...

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具&#xff0c;基于Python写的&#xff0c;原理什么的就不过多再说了&#xff0c;详情参考&#xff1a;https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…...

Django基础

1.Django基础 路由系统视图模板静态文件和媒体文件中间件ORM&#xff08;时间&#xff09; 2.路由系统 本质上&#xff1a;URL和函数的对应关系。 2.1 传统的路由 from django.contrib import admin from django.urls import path from apps.web import viewsurlpatterns …...

HTML,url,unicode编码

目录标题 HTML实体编码urlcode编码unicode编码小结基础例题高级例题 HTML实体编码 实体表示&#xff1a; 以&符号开始&#xff0c;后面跟着一个预定义的实体的名称&#xff0c;或是一个#符号以及字符的十进制数字。 例&#xff1a; <p>hello</p> <!-- 等同…...

Hbase-热点问题(数据存储倾斜问题)

1. 危害 某一台regionserver消耗过多&#xff0c;承受过多的并发量&#xff0c;时间长机器性能下降&#xff0c;甚至宕机 2. 解决 可以通过设计rowkey预分区的方法解决 比如可以预分区120个&#xff0c;1月的数据存到1-10分区&#xff0c;每个月的数据存到10个分区&#xff…...

一个基于Java线程池管理的开源框架Hippo4j实践

线程池痛点 线程池是一种基于池化思想管理线程的工具&#xff0c;使用线程池可以减少创建销毁线程的开销&#xff0c;避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景&#xff0c;线程池的使用是必不可少的。线程池常见痛点&#xff1a; 线程池随便定义&…...

源码解析Flink源节点数据读取是如何与checkpoint串行执行

文章目录 源码解析Flink源节点数据读取是如何与checkpoint串行执行Checkpoint阶段StreamTask类变量actionExecutor的实现和初始化小结 数据读取阶段小结 总结 源码解析Flink源节点数据读取是如何与checkpoint串行执行 Flink版本&#xff1a;1.13.6 前置知识&#xff1a;源节点…...

进阶:Docker容器管理工具——Docker-Compose使用

文章目录 前言Compose大杀器编排服务 1、docker-compose安装curl方式安装增加可执行权限查看版本 2、Docker-compose.yaml命令3、 docker-compose实战4、Docker网络路由docker的跨主机网络路由**问题由来**:方案两台机分别配置路由表ip_forward配置 总结 前言 容器的管理工具&…...

策略模式(Strategy)

策略模式是一种行为设计模式&#xff0c;就是定义一系列算法&#xff0c;然后将每一个算法封装起来&#xff0c;并使它们可相互替换。本模式通过定义一组可相互替换的算法&#xff0c;实现将算法独立于使用它的用户而变化。 Strategy is a behavioral design pattern that def…...

C++ 内存管理:从unique_ptr到内存泄漏

引言 在C++编程中,智能指针是管理动态内存的重要工具。它们通过自动管理内存分配和释放,极大减少了程序员的手动管理负担。然而,尽管unique_ptr被设计为一个所有权唯一的智能指针,它仍然可能导致内存泄漏或资源循环引用。本文将通过一个实际例子来探讨unique_ptr如何在不经…...

手把手教你用STM32F103C8T6+DHT11做个智能加湿器(附完整代码和PCB文件)

从零打造智能加湿器&#xff1a;STM32F103C8T6与DHT11的完美组合 在干燥的秋冬季节&#xff0c;一台能够自动调节湿度的智能加湿器不仅能提升生活舒适度&#xff0c;更是电子爱好者展示技能的绝佳项目。本文将带你从元器件选型开始&#xff0c;逐步完成一个基于STM32F103C8T6单…...

Simulink双矢量MPC实战:从郭磊磊论文到可运行的Matlab Function代码(调制模型预测控制详解)

Simulink双矢量MPC实战&#xff1a;从理论到代码的完整实现路径 当我在实验室第一次尝试复现郭磊磊老师那篇经典论文时&#xff0c;面对12种矢量组合和复杂的PWM生成逻辑&#xff0c;完全不知从何下手。经过三个月的反复试验和代码调试&#xff0c;终于摸清了从论文公式到可运行…...

赛美特冲刺港股:年营收7亿,刚完成8亿融资,估值73亿

雷递网 雷建平 3月31日赛美特信息集团股份有限公司&#xff08;简称&#xff1a;“赛美特”&#xff09;日前更新招股书&#xff0c;准备在港交所上市。赛美特成立以来获得多次融资&#xff0c;其中&#xff0c;2023年4月完成2.33亿元融资&#xff0c;投后估值62.33亿&#xff…...

BiliTools:B站资源高效管理与下载完全指南

BiliTools&#xff1a;B站资源高效管理与下载完全指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools BiliTools是一…...

4款降AI率工具实测横评:最便宜和最贵的效果差多少?

花了几百块&#xff0c;测了一圈&#xff0c;现在把结果告诉你。 降AI率工具、降AI工具保姆级测评2026、降AI这个需求&#xff0c;不同工具之间差距其实挺明显的&#xff0c;不是"随便用一个都一样"。 我的结论&#xff1a;嘎嘎降AI&#xff08;www.aigcleaner.com…...

从SolidWorks到ROS:六自由度机械臂URDF模型转换实战指南

1. 从SolidWorks到ROS的桥梁&#xff1a;URDF模型转换概述 当你费尽心思在SolidWorks中完成了六自由度机械臂的三维建模&#xff0c;看着那些精密的齿轮和连杆在软件中流畅转动时&#xff0c;脑海中可能已经浮现出它在ROS环境中大展身手的场景。但问题来了&#xff1a;如何让这…...

从Markdown到可执行规范:Tessl Framework初探与“规范即源代码”的实践思考

从Markdown到可执行规范&#xff1a;Tessl Framework初探与“规范即源代码”的实践思考 当代码行数不再是衡量开发效率的唯一标准&#xff0c;一种全新的编程范式正在悄然兴起。想象一下&#xff0c;开发者不再需要直接编写实现细节&#xff0c;而是专注于用结构化的自然语言描…...

魔兽世界插件开发5分钟速成:从零掌握API查询与宏命令管理终极指南

魔兽世界插件开发5分钟速成&#xff1a;从零掌握API查询与宏命令管理终极指南 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 魔兽世界API文档平台与宏工具是一个专为《魔兽世界》玩…...

MediaPipe Pose镜像体验:CPU也能毫秒级检测,无需GPU免配置

MediaPipe Pose镜像体验&#xff1a;CPU也能毫秒级检测&#xff0c;无需GPU免配置 1. 引言&#xff1a;CPU上的实时姿态检测革命 在计算机视觉应用中&#xff0c;人体姿态检测一直是个热门领域。从健身应用的动作分析到虚拟试衣的体型测量&#xff0c;这项技术正在改变我们与…...