【问题标题】:How to connect to MongoDB on CloudBees using Spring Data (XML config)?如何使用 Spring Data(XML 配置)连接到 CloudBees 上的 MongoDB?
【发布时间】:2013-10-30 10:49:57
【问题描述】:

为了学习(spring/mongoBD/CLoudBees),我在 CloudBees 上创建了一个 mongoDB 实例,我正在尝试使用 spring Data 连接我的 spring 应用程序。

我收到以下错误:

Caused by: org.springframework.data.mongodb.CannotGetMongoDbConnectionException: 
Failed to authenticate to database [appDB], username = [MY_DB_USERNAME], password = [b**********1]
at org.springframework.data.mongodb.core.MongoDbUtils.doGetDB(MongoDbUtils.java:114)
at org.springframework.data.mongodb.core.MongoDbUtils.getDB(MongoDbUtils.java:74)
at org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:118)
at org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:107)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.ensureIndex(MongoPersistentEntityIndexCreator.java:213)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator$1.doWithPersistentProperty(MongoPersistentEntityIndexCreator.java:146)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator$1.doWithPersistentProperty(MongoPersistentEntityIndexCreator.java:120)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForIndexes(MongoPersistentEntityIndexCreator.java:120)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:92)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:49)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:268)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:168)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:137)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:63)
at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getEntityInformation(MongoRepositoryFactory.java:141)
at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:83)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:147)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:162)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:44)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 46 more

我的 Spring Data 的 XML 配置:

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongo" ref="mongo"/>
    <constructor-arg name="databaseName" value="appDB"/>
    <constructor-arg name="userCredentials" ref="mongoCredentials"/>
</bean>

<bean id="mongoCredentials" class="org.springframework.data.authentication.UserCredentials">
     <constructor-arg name="username" value="#{mongoUri.username}" />
    <constructor-arg name="password" value="#{new java.lang.String(mongoUri.password)}" />
</bean>

<bean id="mongoUri" class="com.mongodb.MongoURI">
  <constructor-arg value="mongodb://MY_DB_USERNAME:MY_DB_PASS@paulo.mongohq.com:10048/xxxxxxxxxxxxx"/>
</bean>

<bean class="com.mongodb.Mongo" id="mongo">
    <constructor-arg ref="mongoUri" />
</bean>

当我使用 umongo 测试我的 URI mongodb://MY_DB_USERNAME:MY_DB_PASS@paulo.mongohq.com:10048/xxxxxxxxxxxxx 时,它连接正确。

Maven 依赖项:

spring data mongodb 版本:1.3.1.RELEASE
mongodb驱动版本:2.10.1
弹簧核心版本:3.2.3.RELEASE

知道我做错了什么吗?

【问题讨论】:

  • 您使用的数据库用户名是管理员用户吗?如果是这样,您将在针对 admin 以外的数据库进行身份验证时收到身份验证失败消息。
  • 我不认为它是管理员用户(这是 cloudbees 上的基本免费计划,我想不可能拥有该计划的管理员用户),我会检查是否有可能拥有一个.谢谢

标签: mongodb spring-mvc cloudbees spring-data-mongodb


【解决方案1】:

我通过用#{mongoUri.database} 替换我的数据库名称“appDB”解决了这个问题,因此 mongoTemplate 的新 Bean def 是:

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongo" ref="mongo"/>
    <constructor-arg name="databaseName" value="#{mongoUri.database}"/>
    <constructor-arg name="userCredentials" ref="mongoCredentials"/>
</bean>

我不明白为什么将数据库名称直接作为字符串是错误的,但无论如何对我来说它适用于这个 XML 配置。

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多