spring boot 工程整合mongodb,遇到的坑
首先说一下背景,因为其他的一个web工程有使用mongo,我想着给另外一个工程把mongo也加过来吧。也是最近做一个发送 丘比特信 的需求,觉得这个信应该是存到 mongodb。结果拿过来遇到了很大的坑,也是对版本对原理不了解吧。
下面介绍一下引入的过程及遇到的坑和解决方案:
第一步,先说版本:
spring boot 的版本
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version>所以mongodb的版本也对应:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.3.1.RELEASE</version> </dependency>说一下涉及到mongo的一些类对应版本:
spring-data-mongodb-3.0.1.RELEASE
spring-boot-starter-data-mongodb-2.3.1.RELEASE
mongodb-driver-sync-4.0.4
mongodb-driver-core-4.0.4
bson-4.0.4
第二步,就是代码:
刚开始的想法是拿来即用
@Autowired private MongoTemplate mongoTemplate;注意:程序都起不来,因为找不到 MongoTemplate
然后自己通过@Bean创建MongoTemplate
@Beanpublic MongoClient mongoClient() {String connectionUserName = "";String connectionUserInfo = "";try {connectionUserName = URLEncoder.encode("XXX","UTF-8");connectionUserInfo = URLEncoder.encode("XXXXXX","UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}String connectionString = "mongodb://"+connectionUserName+":"+connectionUserInfo+"@XXXXXXXXX:XXXXXXXXX/XXXXXXXXX?authMechanism=SCRAM-SHA-1";return MongoClients.create(connectionString);}@Beanpublic MongoTemplate mongoTemplate() {return new MongoTemplate(mongoClient(), "XXXXXXXXX");}
注意:
网上的很多实例,连接串都是没有用户名和密码的。
"mongodb://username:password@host:port/dbname?authMechanism=SCRAM-SHA-1";
我们的密码是含有@符号,所以要encode,
username:password,这个中间的冒号一定不能encode,在这反复异常。冒号encode,提示找不到密码, 冒号不encode,提示用户名或者密码包含@或者冒号。
然后是禁用MongoDB数据库自动化配置:
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) //刚开始只排除第一个类,反复报异常
第三步,使用
Query query = new Query(Criteria.where("baseCountryCode").is(country));List<BeforeVipCupidMongo> cupidList = mongoTemplate.find(query, BeforeVipCupidMongo.class);
总结:
- 版本对照,spring boot 的版本 和 mongo 的版本;
- spring boot 禁用 mongodb 数据库自动化配置;
- 如果自定义MongoTemplate,需要注意 connectionString,密码如果含有@或者:,一定要encode,而username:password这个之间的:是不能encode的;
- 操作mongo的方式
参考资料:
SpringBoot与MongoDB版本对照参考_mongodb和springboot版本_一恍过去的博客-CSDN博客
https://www.cnblogs.com/huifeidezhuzai/p/16352608.html
https://www.cnblogs.com/zeussbook/p/15330735.html
详解SpringBoot整合MongoDB技术分解_独善其身有始有终的技术博客_51CTO博客
相关文章:
spring boot 工程整合mongodb,遇到的坑
首先说一下背景,因为其他的一个web工程有使用mongo,我想着给另外一个工程把mongo也加过来吧。也是最近做一个发送 丘比特信 的需求,觉得这个信应该是存到 mongodb。结果拿过来遇到了很大的坑,也是对版本对原理不了解吧。 下面介…...
防抖函数(最全 最干净 最好理解)
1.应用场景 1.input输入框 输入远程查询 2.邮箱,手机号验证,用户名验证 3.resize等高评率场景 2.解决问题 高频场景带来的重复渲染 等问题 多次操作 只在操作结束后再执行操作函数 3.具体实现 3.1this问题(因为settimeout是window的对…...

王小川,才是深「爱」李彦宏的那个人?
在推出中国首个类ChatGPT产品「文心一言」后,李彦宏在接受专访时断言,中国基本不会再出一个OpenAI了,「创业公司重新做一个ChatGPT其实没有多大意义,基于大语言模型开发应用机会很大,没有必要再重新发明一遍轮子。」 听…...

南京邮电大学通达学院2023《电子装配实习》报告
南京邮电大学通达学院2023《电子装配实习》报告 一 声明二 题目/实习报告提示三 例答 红笺寄 休遣玉人知 ——赠nmy 一 声明 南京邮电大学通达学院2023《电子装配实习》报告 答案更新时间:2023.04.10,已更新完成,如无错误不在更新 由于作者解答能力有限…...

Linux--tty
Linux 终端(TTY) TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设…...
一位女程序员的自述:我是如何成为前端工程师的
今天,我想和大家分享一下我的职场经历:我是如何成为一名前端工程师的,以及我为什么会选择这个职业。此外,大家比较关心的是我们为什么要出国工作呢?也是想给自己的职业生涯做一个阶段性的总结,尤其是作为一…...
C++命名空间详解
1.什么是命名空间 在c中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序…...
HDMI EDID概念梳理
EDID概念梳理: EDID数据格式: EDID包含两个部分,基本的EDID只有128个字节,还有128字节的扩展EDID,扩展部分不是必须有的。那通常电视都有扩展EDID。那EDID的详细定义在规范里面都可以找到,主要有以下几部分…...

Android端推送消息之极光推送
推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点: 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息; --缺点: 费钱, 一毛钱一条;…...

2023测试工程师全新技术栈,吃透这些,起薪就15k
相信每个准备软件测试面试的同学,不管你是大学刚毕业,满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业,都会面临着众多的疑问和不解,那就是该怎么走出着第一步,今天本文一次性告诉你&a…...

十、CNN卷积神经网络实战
一、确定输入样本特征和输出特征 输入样本通道数4、期待输出样本通道数2、卷积核大小33 具体卷积层的构建可参考博文:八、卷积层 设定卷积层 torch.nn.Conv2d(in_channelsin_channel,out_channelsout_channel,kernel_sizekernel_size,padding1,stride1) 必要参数&a…...

App 自动化测试
一、移动端测试基础 1 移动端自动化环境搭建 1.1 java安装 1.2 Android SDK安装 SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK 就是 Android 专属的软件开…...
考研英语知识点
考研英语知识点 一、在考研英语考试中,常考的英语时态 1.一般现在时 (Simple Present Tense) 一般现在时指的是现在正在进行或经常发生的事情。它用于描述普遍真理,频繁的习惯,以及现在正在发生的事情。例如:我每天早上六点起床…...

IPSEC实验(IPSECVPN点到点,DSVPN,IPSECVPN旁挂)
目录 一、复现实验1、防火墙的IPSECVPN点到点实验-1,拓扑图的搭建-2,配置IP,开通ping,并且设置策略-3,在网络中的IPSEC进行配置第一阶段:发出的UDP500流量第二阶段 发出的ESP流量二台防火墙建立策略禁用其它策略,在IPSEC上配置策略…...

从4k到42k,软件测试工程师的涨薪史,给我看哭了
清明节一过,盲猜大家已经无心上班,在数着日子准备过五一,但一想到银行卡里的余额……瞬间心情就不美丽了。 最近,2023年高校毕业生就业调查显示,本科毕业月平均起薪为5825元。调查一出,便有很多同学表示自己…...
tomcat作业
简述静态网页和动态网页的区别。 静态网页和动态网页是网站的两种基本类型。它们的主要区别在于它们如何生成和呈现网页内容。 静态网页是一种由服务器直接发送给用户的固定HTML文件,其中包含所有网页的内容和样式。这些页面不会随着用户的操作而改变,它…...

除了Java,还可以培训学习哪些IT技术?
除了Java,还可以培训学习哪些IT技术? 转行IT学Java似乎已经成为很多人的首选,原因无非是开发技术含量高、开发有前景、开发是一个互联网企业的核心岗位,最重要的是开发薪资待遇高。但其实只单纯因为薪资选择Java的话,小…...
Mysql优化(一)-- sql语句优化概述及数据库优化
1. sql语句优化 1.1 优化查询过程中的数据访问 访问数据太多导致查询性能下降确定应用程序是否在检索大量超过需要的数据,可能是太多行或列确认MySQL服务器是否在分析大量不必要的数据行避免犯如下SQL语句错误 查询不需要的数据。解决办法:使用limit解…...
深度学习快速参考:1~5
原文:Deep Learning Quick Reference 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目…...

软件设计师笔记-----程序设计语言与语言处理程序基础
文章目录 七、程序设计语言与语言处理程序基础7.1、编译与解释(低频)7.2、文法(低频)7.3、有限自动机与正规式(几乎每次都会考到)有限自动机正规式 7.4、表达式(偶尔考到)7.5、传值和…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...