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

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);

总结:

  1. 版本对照,spring boot 的版本 和 mongo 的版本;
  2. spring boot 禁用 mongodb 数据库自动化配置;
  3. 如果自定义MongoTemplate,需要注意 connectionString,密码如果含有@或者:,一定要encode,而username:password这个之间的:是不能encode的;
  4. 操作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博客

http://www.lryc.cn/news/60201.html

相关文章:

  • 防抖函数(最全 最干净 最好理解)
  • 王小川,才是深「爱」李彦宏的那个人?
  • 南京邮电大学通达学院2023《电子装配实习》报告
  • Linux--tty
  • 一位女程序员的自述:我是如何成为前端工程师的
  • C++命名空间详解
  • HDMI EDID概念梳理
  • Android端推送消息之极光推送
  • 2023测试工程师全新技术栈,吃透这些,起薪就15k
  • 十、CNN卷积神经网络实战
  • App 自动化测试
  • 考研英语知识点
  • IPSEC实验(IPSECVPN点到点,DSVPN,IPSECVPN旁挂)
  • 从4k到42k,软件测试工程师的涨薪史,给我看哭了
  • tomcat作业
  • 除了Java,还可以培训学习哪些IT技术?
  • Mysql优化(一)-- sql语句优化概述及数据库优化
  • 深度学习快速参考:1~5
  • 软件设计师笔记-----程序设计语言与语言处理程序基础
  • WebRTC 系列(三、点对点通话,H5、Android、iOS)
  • RabbitMQ( 发布订阅模式 ==> DirectExchange)
  • Pytorch基础 - 5. torch.cat() 和 torch.stack()
  • 基于AIGC的3D场景创作引擎概述
  • C++算法恢复训练之快速排序
  • 事务的特性
  • Python 计算三角形的面积、Python 阶乘实例
  • C++入门教程||C++ 重载运算符和重载函数||C++ 多态
  • docker+docker-compose+nginx前后端分离项目部署
  • 基于PCA与LDA的数据降维实践
  • 【Hello Network】网络编程套接字(一)