spring--data-mongondb ...CannotGetMongoDbConnectionException: Failed to authenticate to database
来源:互联网 发布:天下粮仓 知乎 编辑:程序博客网 时间:2024/05/18 02:17
HTTP Status 500 - Request processing failed; nested exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [lxkdb], username = [tester], password = [p******d]
type Exception report
message Request processing failed; nested exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [lxkdb], username = [tester], password = [p******d]
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [lxkdb], username = [tester], password = [p******d]
上面是部分异常的内容,整个异常,如下图:
然后,为什么会有这个异常?
本意我是打算使用spring + springMVC + mongoDB,做个测试项目的。但是配置完成之后,一旦在spring里面加入mongo数据库的配置,那么在启动tomcat服务器的时候,就会出现上图的异常,很是莫名其妙。为什么会这个样子。
使用的spring-data-mongondb整合mongodb。applicationContext-dao.xml具体配置如下:
<?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:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"> <mongo:repositories base-package="com.lxk.repository" /> <mongo:mongo host="${mongodb.host}" port="${mongodb.port}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"/> </mongo:mongo><mongo:db-factory dbname="${mongodb.name}" username="${mongodb.username}" password="${mongodb.password}" mongo-ref="mongo" /><!-- 去掉mongodb自动生成的_class字段 --><bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" /><bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper"><constructor-arg name="typeKey"><null/></constructor-arg> </bean> <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter"><constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /><constructor-arg name="mappingContext" ref="mappingContext" /><property name="typeMapper" ref="defaultMongoTypeMapper" /> </bean><bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /><constructor-arg name="mongoConverter" ref="mappingMongoConverter" /></bean> <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /></beans>
pom.xml里面引用mongodb相关的依赖如下:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.5.0.RELEASE</version> </dependency>不要在意我读取mongo配置文件的问题,只是这个地方,大家的实现方式各有不同而已,放心,我是可以读取到配置文件的,能报上面的错,也说明这不是问题。
也不可能是用户名或者密码错误,因为我使用romongo,使用相同的用户名和密码,链接数据库是OK的。
然后,问题究竟出在哪里?
最后,发现我自己电脑 上安装的mongo数据库的版本是3.4,算是最新的吧,因为是在一月份的时候,刚刚安装的。而且,也在命令行模式下,开启了mongo数据库的权限限制。就是要对数据库进行操作,首先要进行权限验证。
当时,测试都是OK的。但是现在想使用spring--data-mongondb这个spring工具来操作mongodb,却失败啦。很是郁闷,在网上 查找了各种配置。发现他们的配置方法和我上面的大同小异。没什么不同的。
直接说原因吧:
可以看到上面这个,mongodb和对应的Java driver的对应关系。问题就出现在这个地方,因为上面的那个配置对于比较旧的mongodb是管用的。但是对于升级到3.x之后的mongodb就不管用了。还是不清楚的话,再看下面2张图。
哦,这下问题就算是明朗了,原来是我使用的Java driver的版本太低了。spring-data-mongo的版本在这摆着呢,我在pom里面只是引入了这个jar包的依赖,他会自动 的去下载自己依赖的Java driver包,那就只能升级这个spring-data-mongo咯。但是看下图,
在这,可以看到,spring-data-mongo现在最新的是1.10.1.release。那么再看下图。maven中jar包 依赖关系图。
可以看到,现在就算把这个spring-data-mongo升级到1.10.1版本,他的Java driver的版本才2.14.3,那么这个还是不行的。看下图,这个是在mongodb官网的又一个截图
可以看到,对于mongodb3.4来说,他要求Java driver 的版本必须是3.4的,而且,他的这次升级是不兼容以前2.x的,这就很郁闷了。怎么能这么做生意呢。
好吧,这也不是我说的算的。
这么分析完之后,要解决这个报错的话,就有两种方案。
方案1:抛弃上面xml文件的mongo配置,在找个新的配置方案,就使用最新的3.4版本的mongodb数据库,
方案2:舍弃当前的mongo3.4版本数据库,退回到图上支持的某个版本。
那么,我是先尝试的是方案1,确实想去找一些新的配置方法,来适应这个3.4版本的mongo数据库。但是,网上的mongo配置资料,基本上都是跟我上面xml上的配置差不多的。根本找不到几个可以使用的。没办法。还好我在一月份安装mongo的时候,有记录过。
所以,现在只能去实现plan B 。对,没错,卸载了,mongodb3.4,然后再找个低版本的mongo数据库使用。
因为我有记录,这次卸载和重装mongodb服务倒是很快的。
分分钟就搞定了。找到的mongodb安装是:mongodb-win32-x86_64-2008plus-2.6.7-signed.msi。
链接:http://pan.baidu.com/s/1boODRtl 密码:q2ah
附上某度云盘的链接。
卸载了mongodb,再次安装完之后,再次,设置权限,创建root数据库管理用户和普通数据库用户。
再次安装请参考:详细图解mongodb 3.4.1 win7x64下载、安装、配置与使用2017/01/16
再次设置权限和创建不同权限用户请参考:mongodb authentication 设置权限之后,新建个管理账户和一般数据库用户,在win 7 64bit 环境下测试使用实例
在,上面的这些,都搞定之后,那么,再次启动刚刚的那个spring + springMVC +mongodb,之后,就完美的解决了刚刚报错的问题啦。
为什么我要这么配置呢?具体为什么这么配置,还有没有更好的配置方案,我目前是不清楚了。但是这么配置之后,使用mongo数据库,那是相当的舒爽的。具体怎么个舒爽法,看下面的使用,你就知道啦。
首先是要在mongo数据库中生成对应collection,也就是生成一个表结构啦。直接如下:
@Document(collection = "student")public class Student implements Serializable { @Id private String id; private String name; private int age; private boolean sex;}就这么简单,只需要添加上@document,之后,他就可以在你保存数据到数据库的时候,自动生成一张表。不像MySQL啥的,还得自己写个insert语句,渣渣。有了框架还得自己拼sql语句,那只能说框架还是不够机智。还得一个java文件一个xml文件配对使用操作数据库。很是厌恶这种方式,虽然我不知道现在有没有变化,或许这个操作方式,是以前的啦。那就算是我勿喷了。
然后再看如何使用数据库的crud。
这个也简单,保存或者更新都可以使用save()方法。查询的时候,可以使用@query注解,而不是好多人写的,自己先定义个接口,再自己去实现,还得自己调用工厂方法,得到个mongo实例,在封装数据,哎哟,麻烦死了。自己写那么多重复代码,自己不嫌弃啰嗦吗。
@Repository("studentRepository")public interface StudentRepository extends MongoRepository<Student, String> { @Query("{'id':?0}") Student findById(String id); @Query("{'name':?0}") List<Student> findByName(String name);}就这么简单,你只需要传入简单的参数,就可以从mongo数据库查询你想要的结果。多么简单。方便。再看看别人写的crud。我真看不下去,太长了,太啰嗦了。
而且,这个写法,跟你在使用mongo数据库的可视化工具,比如mongoVUE或者romongo一样,使用的语句差不多。
这个还是可以扩展的,自定义接口。啥的,后话了。
在仔细分析了这个错误之后,湿胸我学到 了什么?
不要对于一些事情,以“不就是。。。。”的态度。我的这个问题的出现以及如何解决,就充分说明了这个问题,在你没动手去做之前,大可以说:“不就是一个jdbc吗,那不是分分钟的事吗!”,但是你要是真的动手去做某一件事的时候,你就发现,说是一回事,做,就是另外一回事啦。
- spring--data-mongondb ...CannotGetMongoDbConnectionException: Failed to authenticate to database
- Hadoop Pipes “Server failed to authenticate”错误及解决
- unable to authenticate user
- Unable to connect to a repository at URL '': authorization failed: Could not authenticate to server:
- ERROR: failed to establish dependency between database sgerp5 and diskgroup resource ora.DATA.dg
- Failed to shutdown database console gracefully
- Assertion failed: Unable to setup database devices
- zabbix connection to database 'zabbix' failed:
- Importing XML Data to a Database
- Posting Data to a Connected Database
- Large Interconnected Data Belongs to a Database
- Large, Interconnected Data Belongs to a Database
- Metasploit启动时Failed to connect to the database
- metasploit msf Failed to connect to the database解决方法
- Metasploit启动时Failed to connect to the database
- unable to authenticate the package:8999887.itmsp / all transports failed diagnostics
- Hadoop Pipes程序运行报错Server failed to authenticate解决方法
- 解决Azure Management API ForbiddenError: The server failed to authenticate the request
- SSL 1120——【USACO 2.4】回家[最短路]
- Atiitt 使用java语言编写sql函数或存储过程
- 关于客户端向服务器端上传文件/照片 失败的情况.可以尝试此方法
- No operations allowed after statement closed.
- WDCP面板系列教程
- spring--data-mongondb ...CannotGetMongoDbConnectionException: Failed to authenticate to database
- 哈希表中线性探测再散列法及等概率条件下平均查找长度
- bzoj 4556
- 如何解决u盘插入电脑 在“我的电脑”中不显示
- 007.PHP生成随机字符串
- Android Fragment解析以及Fragment中碰到的各种坑
- 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(三)编译并安装cmake和git工具
- Win10下Android开发环境搭建
- Atitit 提升进度的大原则与方法 高层方法 attilax总结