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

news/2024/12/22 18:13:30/

💡版本依赖

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等系列文章,一系列干货随时送达!


http://www.ppmy.cn/news/1014544.html

相关文章

python实现简单的爬虫功能

前言 Python是一种广泛应用于爬虫的高级编程语言&#xff0c;它提供了许多强大的库和框架&#xff0c;可以轻松地创建自己的爬虫程序。在本文中&#xff0c;我们将介绍如何使用Python实现简单的爬虫功能&#xff0c;并提供相关的代码实例。 如何实现简单的爬虫 1. 导入必要的…

电脑IP地址错误无法上网怎么办?

电脑出现IP地址错误后就将无法连接网络&#xff0c;从而无法正常访问互联网。那么当电脑出现IP地址错误时该怎么办呢&#xff1f; 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接&#xff0c;如果发现禁用&#xff0c;则将其启用即可。 启用方法&#xff1a;点击桌…

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;如…

【C高级】Day4 shell脚本 排序

1. 整理思维导图 2. 写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 #!/bin/bash function getid() {uidid -ugidid -g }getid echo "uid$uid" echo "gid$gid"3. 整理冒泡排序、选择排序和快速排序的代码 #include <myhead.h>void Inp…

Verilog学习记录-自用

always语句块一定条件写完整&#xff0c;否则电平触发&#xff0c;综合生成锁存器 task不可综合&#xff0c;主要用于仿真/验证 大部分都是并行执行的&#xff0c;只有begin end块中阻塞语句是串行 if-else和case的区别 if-else面积小&#xff0c;但时延&#xff08;执…

本地项目如何连接git远程仓库

在本地新建项目后&#xff0c;如何连接git远程仓库呢&#xff1f;步骤如下&#xff1a; 第一步&#xff0c; 首先我们在git上新建仓库&#xff0c;设置模板可勾选Readme文件。&#xff08;readme文件的创建是为了介绍所写代码的一些详细信息,为了之后更好的维护。&#xff09;…

有关OpenBSD, NetBSD, FreeBSD -- 与GPT对话

1 介绍一下 - OpenBSD, NetBSD, FreeBSD 当谈论操作系统时,OpenBSD、NetBSD和FreeBSD都是基于BSD(Berkeley Software Distribution)的操作系统,它们各自是独立开发的,并在BSD许可下发布。这些操作系统有很多共同点,但也有一些差异。以下是对它们的简要介绍: OpenBSD: O…

嵌入式开发学习(STC51-9-led点阵)

内容 点亮一个点&#xff1b; 显示数字&#xff1b; 显示图像&#xff1b; LED点阵简介 LED 点阵是由发光二极管排列组成的显示器件 通常应用较多的是8 * 8点阵&#xff0c;然后使用多个8 * 8点阵可组成不同分辨率的LED点阵显示屏&#xff0c;比如16 * 16点阵可以使用4个8 *…