集成mongodb遇到Usage of 'UserCredentials' with 'MongoClient' is no longer supported. Please use 'MongoCredential' for 'MongoClient' or just 'Mongo'
前段时间被安排在老项目里集成一下mongodb,然后就遇到了一系列的问题,文章也是五花八门,答非所问,告诉你版本不对,实则配置有问题等等。
集成mongodb第一件事情就是要了解公司现在使用的mongodb版本是多少,我们现在服务器上用到的mongodb的版本是4.4的版本,然后再去选择对应的方法去集成使用mongodb,我的选择是使用MongoTemplate来操作mongodb,为什么选择使用MongoTemplate是因为spring封装了对他的很多使用方法,用起来和方便快捷,只需配置好mongodb剩下的交给spring去管理,spring对他的更新也有很多个版本,用起来相对稳定,资料也很多。接着我们引入jar包,先去spring官网看一下,找到Requirements:
我们的项目用的是jeesite的项目,jdk版本是1.7的,用到的sping版本是4.2.3的,显然我们的jdk跟spring的版本都不支持2.x以上的jar包,所以我们选择1.x的jar包,选一个较新且较多的release版本
引入pom:
<groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.15.RELEASE</version> </dependency>
引入1.10.15版本之后对应的Java驱动也下载下来,版本入下:
去mongodb官网找一下对应的版本支持,如果对应的java驱动不满足我们还需要手动导入以一下Java驱动来覆盖当前的驱动
配置mongodb.xml,配置前还是先看下文档
我们用到的版本是1.10.15,在1.8以后的版本中都将使用新标签mongo变成mongo-client,options改为client-options,在我第一次集成的时候没有看文档,导致遇到了很多问题,如果不按照上面文档写的配置就会报错,报错的内容很容易就能看懂
把标签改成文档要求的就可以了,下面贴一份正确的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd"> <context:property-placeholder location="classpath*:mongodb.properties" /> <mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pwd}@${mongo.defaultDbName}"> <mongo:client-options connections-per-host="${mongo.connectionsPerHost}" min-connections-per-host="${mongo.minConnectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" description="${mongo.description}" max-connection-idle-time="${mongo.maxConnectionIdleTime}" max-connection-life-time="${mongo.maxConnectionLifeTime}" heartbeat-socket-timeout="${mongo.heartbeatSocketTimeout}" heartbeat-connect-timeout="${mongo.heartbeatConnectTimeout}" min-heartbeat-frequency="${mongo.minHeartbeatFrequency}" heartbeat-frequency="${mongo.heartbeatFrequency}" /> </mongo:mongo-client> <mongo:db-factory id="mongoDbFactory" dbname="${mongo.project}" mongo-ref="mongoClient"/> <!-- 1.Spring提供的mongodb操作模板--> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongoDbFactory" /> </bean> </beans>
最开始配置的时候因为没看文档还遇到了其他问题,就是在mongoDbFactory的配置写错了,下面写出错误的配置跟报错信息以及解决问题的方法:
错误的配置:
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.defaultDbName}" host="${mongo.host}" port="${mongo.port}" username="${mongo.user}" password="${mongo.pwd}" mongo-ref="mongoClient"/>
报错信息:
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Usage of 'UserCredentials' with 'MongoClient' is no longer supported. Please use 'MongoCredential' for 'MongoClient' or just 'Mongo'. at org.springframework.data.mongodb.core.SimpleMongoDbFactory.<init>(SimpleMongoDbFactory.java:139) at org.springframework.data.mongodb.core.SimpleMongoDbFactory.<init>(SimpleMongoDbFactory.java:95) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) ... 26 more
解决方案:
上面的报错信息的意思就是不支持UserCredentials使用MongoClient,请使用MongoClient,UserCredentials这个单词的意思就是认证的意思,我们用到的mongodb版本是4.4,mongodb在版本3.0以上的版本就需要认证
简单贴一段源码,spring封装mongodbFactory是叫SimpleMongoDbFactory,他继承MongoDbFactory,报刚刚的错误也就是使用到SimpleMongoDbFactory的这个构造方法的时候报错,还是去官网,官网有很详细的配置及介绍:
文档详细的写了mongodb3.0版本应该怎配置,并且告诉你如果Java驱动换成3以上的版本时候将忽略以下属性
文档还提供了两种方式认证mongodb,一种通过Java代码的方式设置,一种是通过xml的方式配置
文档上明确写了对于认证的配置要写在mongo:mongo-client标签中,所以如果我们在mongo:db-factory标签中配置了上面的参数就会报上面的错误,至此整个项目集成mongodb就完成了。
这次集成以上我遇到了很多问题,一些版本问题比较多,我想说的是其实在做一个你没有做过的事情的时候我们大多数人会去搜索别人怎么使用的怎么集成的,我想说这个没有问题,但是网上很多人写的文章版本跟你的环境版本都不一样,所以直接复制很多情况下是是用不了的,复制的过程也要想想为什么这么配置,其实网上的文章很乱,很多都是在复制一个人的文章发表,错都是错一样的,还有的文章竟然还要收费,就上面的那个bug我搜到一个文章,文章竟然还要收费。我就不评论什么,我想说索然这个东西你可能没用过,但是多看看文档,多查查资料,这些问题一定是有办法解决的,所以遇到问题不要慌,静下心来,一定会解决问题的,我写文章不光是要记录下来这个错误对我的印象深刻,也是通过文章的方式告诉正在遇到此问题的同学问怎么解决这个问题。另外我们项目用到的是jeesite1.X的框架,其实就是人家搭好一套ssm的框架封装了一些方法更快捷高效的开发业务,我被安排集成mongodb的时间比较紧,所以我写了一个不是很通用的方法来实现功能,等功能上线后在没有给我安排工作的时候,我自己封装了一下mongo的使用,通过注解的方式添加到字段上就可以直接是查询到你想要的数据了,使用的人不需要知道怎么使用mongo也可以操作,这里代码就不贴出来了,因为我封装好的方法也只是为了满足我们系统使用jeesite的框架,其他项目也可以用,但是需要稍作修改。如果有同学需要可以评论私聊,我可以共享我封装的方法。
原文地址:https://www.cnblogs.com/HuuuWnnn/p/12974567.html
- HDUOJ--------1420Prepared for New Acmer
- PowerVM虚拟化环境下 CPU 利用率的监控与探究
- 虚函数中构造函数的调用顺序
- HDUOJ-----4512吉哥系列故事——完美队形I(LCIS)
- go语言mongdb管道使用(二)
- HDUOJ--4565 So Easy!
- Go 语言Map(集合)
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- java 快速求素数
- 狄斯奎诺(dijkstra 模板)
- HDUOJ---汉洛塔IX
- 小错误系列
- HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
- HDUOJ----4509湫湫系列故事——减肥记II
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- springmvc中@PathVariable和@RequestParam的区别
- centos7 安装mysql5.6
- bashdb安装及调试shell脚本
- linux awk指令详解
- linux sed指令详解
- Grafana使用zabbix自定义模板
- linux shell之变量的使用规则
- 第11期:压缩表
- grafana-zabbix插件安装和配置zabbix mysql
- grafana使用教程之API key
- Grafana使用教程之安装
- Java基础数据类型之包装类equals和==详解
- SCP不用密码传输文件
- Java 使用Collections.reverse对list集合进行降序排序
- Liquibase异常 mysql数据库 Cannot add foreign key constraint