升级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
相关产品推荐
相关产品推荐

