无法为MongoDB指定用户名和密码

问题描述

我正在尝试修改https://www.baeldung.com/spring-data-mongodb-tutorial以连接到MongoDB Atlas云实例(https://www.mongodb.com/cloud/atlas

这是本地数据库连接:

我正在尝试将其更改为:

<mongo:mongo-client host="cluster.test.mongodb.net/" port="27017" id="mongoClient" credentials="dbUser:password****@mydb">
</mongo:mongo-client>

但是我收到错误消息:“此处不允许使用属性凭据”

我应该在哪里以及如何定义属性凭证?

我正在使用MongoDB驱动程序版本4.0.5

整个mongoConfig.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:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p" 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.xsd
       http://www.springframework.org/schema/data/mongo
       http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config />
    
    <mongo:mongo-client host="cluster.test.mongodb.net/" port="27017" id="mongoClient" credentials="dbUser:password****@mydb">
    </mongo:mongo-client>

    <mongo:db-factory id="mongoDbFactory" dbname="test" mongo-client-ref="mongoClient" />

    <bean id="gridFstemplate" class="org.springframework.data.mongodb.gridfs.GridFstemplate">
        <constructor-arg ref="mongoDbFactory" />
        <constructor-arg ref="mongoConverter" />
    </bean>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
        <constructor-arg ref="mongoConverter" />
    </bean>

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <mongo:repositories base-package="com.baeldung.repository" mongo-template-ref="mongoTemplate" />

    <bean class="com.baeldung.event.CascadeSaveMongoEventListener">
    </bean>

    <mongo:mapping-converter id="mongoConverter" base-package="com.baeldung.converter">
        <mongo:custom-converters base-package="com.baeldung.converter" />
    </mongo:mapping-converter>

</beans>

我遵循了这个https://developpaper.com/notes-for-spring-xml-mongodb-connection-configuration-specifying-user-name-and-password/教程,其中的定义为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/data/mongo
        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">

    <mongo:mongo-client host="${mongo.host}" port="${mongo.port}" id="mongoClient" credentials="${mongo.username}:${mongo.password}@${mongo.dbname}">
    </mongo:mongo-client>
    <mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongoClient" id="mongoDbFactory" />
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>

</beans>

解决方法

此问题已解决:

spring.data.mongodb.uri=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority

来自问题:How to connect Mongodb Atlas to Spring

我使用application.properties而不是XML config进行连接。