2013-10-30 39 views
1

爲了學習(spring/mongoBD/CLoudBees),我在CloudBees上創建了一個mongoDB實例,並且我試圖使用spring Data連接我的spring應用程序。如何使用Spring Data(XML配置)連接到CloudBees上的MongoDB?

我得到以下錯誤:

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數據的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:[email protected]:10048/xxxxxxxxxxxxx"/> 
</bean> 

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

當我測試URI的mongodb:// MY_DB_USERNAME:[email protected]: 10048/xxxxxxxxxxxxx使用umongo,它連接正確。

Maven依賴:

spring data mongodb version: 1.3.1.RELEASE 
mongodb driver version: 2.10.1 
spring core version: 3.2.3.RELEASE

什麼我做錯了任何想法?

+0

是你使用管理員用戶的數據庫用戶名?如果是這樣,那麼在對「admin」以外的數據庫進行身份驗證時,您將無法驗證消息。 –

+0

我不認爲這是一個管理員用戶(這是cloudbees上的基本免費計劃,我想這是不可能有一個管理員用戶的計劃),我會檢查是否有可能有一個。謝謝 –

回答

2

我通過#{} mongoUri.database所以新豆DEF爲mongoTemplate更換我的DB名「appDB」解決的問題是:

<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配置。

相關問題