Spring XML配置MongoDB Atlas时credentials属性配置报错问题
解决Spring XML配置MongoDB Atlas时的
credentials属性错误问题 你遇到的Attribute credentials is not allowed here错误,是因为你当前使用的Spring Data MongoDB版本(适配MongoDB驱动4.0.5)已经不再支持在<mongo:mongo-client>标签上直接设置credentials属性了——这个属性是旧版本的用法,新版本已废弃,转而提供了更规范的配置方式。
下面给你两种可行的解决方案,优先推荐第一种(适配MongoDB Atlas的特性):
方案1:使用MongoDB Atlas连接字符串(推荐)
MongoDB Atlas会提供一个完整的连接字符串,里面包含了集群地址、认证信息、数据库等所有必要配置,用这种方式配置最简单且不易出错:
修改你的<mongo:mongo-client>标签为以下内容:
<mongo:mongo-client id="mongoClient" uri="mongodb+srv://dbUser:password****@cluster.test.mongodb.net/test?retryWrites=true&w=majority" />
注意事项:
- 替换字符串中的
dbUser、password****为你的Atlas数据库用户名和密码 - 这个连接字符串可以直接从你的Atlas控制台复制,确保你已经将本地IP地址加入了Atlas的IP白名单
mongodb+srv://开头的连接字符串会自动解析集群的节点和端口,不需要手动指定host和port属性
方案2:使用<mongo:client-credentials>子元素配置认证
如果你不想用连接字符串,可以通过<mongo:mongo-client>的子元素来配置认证信息,这是Spring Data MongoDB新版本推荐的XML配置方式:
<mongo:mongo-client id="mongoClient" host="cluster.test.mongodb.net" port="27017"> <mongo:client-credentials username="dbUser" password="password****" database="mydb" /> </mongo:mongo-client>
这种方式通过子元素明确指定用户名、密码和认证数据库,避免了旧属性的兼容性问题。
修正后的完整配置示例(使用连接字符串)
<?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 /> <!-- 使用MongoDB Atlas连接字符串 --> <mongo:mongo-client id="mongoClient" uri="mongodb+srv://dbUser:password****@cluster.test.mongodb.net/test?retryWrites=true&w=majority" /> <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>
内容的提问来源于stack exchange,提问作者blue-sky
相关产品推荐
相关产品推荐

