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博客