You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级spring-mongo.xsd至3.0版本后mongo相关标签属性报错如何解决?

问题原因

Spring Data MongoDB 3.0 版本对 XML Schema 做了不兼容的升级,你在1.8版本中使用的旧标签、属性已经被正式移除,因此会出现元素找不到、属性不被允许的报错:

  • <mongo:mongo> 标签已被删除,替换为新的 <mongo:mongo-client> 标签
  • <mongo:db-factory> 的mongo-ref、username、password属性全部被移除,认证信息需要通过子标签配置,引用Mongo实例的属性改为mongo-client-ref
修复后的XML配置

两种可选配置方式,选其一即可:

方式1:分步骤配置(保留原配置项拆分结构)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       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">

    <!-- 替换旧的mongo:mongo标签为mongo:mongo-client,配置副本集和写关注 -->
    <mongo:mongo-client id="mongo" replica-set="${mongo.replicaset}">
        <mongo:client-settings write-concern="${mongo.write_concern:REPLICAS_SAFE}" />
    </mongo:mongo-client>

    <mongo:db-factory id="DbFactory" mongo-client-ref="mongo" dbname="${mongo.db}">
        <!-- 认证信息通过子标签配置,不要写在db-factory的属性里,database属性填你的认证库,默认是admin -->
        <mongo:credentials username="${mongo.username}" 
                          password="${mongo.password}" 
                          database="${mongo.auth-db:admin}" />
    </mongo:db-factory>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="DbFactory"/>
        <property name="writeResultChecking" value="EXCEPTION"/>
    </bean>
</beans>

方式2:连接字符串配置(更简洁,适合所有配置项统一管理)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       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">

    <!-- 所有连接、认证、副本集、写关注配置都放在连接字符串里 -->
    <mongo:mongo-client id="mongo" connection-string="mongodb://${mongo.username}:${mongo.password}@${mongo.replicaset}/${mongo.db}?replicaSet=${mongo.replicaset}&w=${mongo.write_concern:REPLICAS_SAFE}" />

    <mongo:db-factory id="DbFactory" mongo-client-ref="mongo" dbname="${mongo.db}" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="DbFactory"/>
        <property name="writeResultChecking" value="EXCEPTION"/>
    </bean>
</beans>
注意事项

你之前尝试credentials属性报错是因为3.x版本中credentials不是<mongo:db-factory>的属性,而是独立的子标签,不能直接写在标签属性上。

内容的提问来源于stack exchange,提问作者user1191027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:01