升级mongo-java-driver至3.9.1后MongoTemplate适配问题求助
改写方案:适配Spring Data MongoDB 3.2.0的MongoClient创建逻辑
以下是针对你的代码的完整改写版本,完全适配Spring Data MongoDB 3.2.0和mongo-java-driver 3.9.1的API要求:
import com.mongodb.ServerAddress; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.MongoClientURI; import org.springframework.data.mongodb.core.MongoTemplate; import java.util.ArrayList; import java.util.List; public MongoTemplate sampleMethod() { MongoClient client = null; if (...) { List<ServerAddress> saList = new ArrayList<>(); for (...) { saList.add(...); } // 基于ServerAddress列表构建MongoClient com.mongodb.MongoClientSettings settings = com.mongodb.MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(saList)) .build(); client = MongoClients.create(settings); } else if (...) { MongoClientURI mongoClientURI = new MongoClientURI("mongodb://..."); // 从MongoClientURI提取连接字符串创建客户端 client = MongoClients.create(mongoClientURI.getURI()); } else { String connectionStr = "mongodb://..." + this.encryptedProperties.getProperty("mongo.username") + "...."; // 直接用拼接好的连接字符串创建客户端 client = MongoClients.create(connectionStr); } return new MongoTemplate(client, srcDbname); }
关键修改说明
- 包路径替换:将旧的
com.mongodb.MongoClient替换为com.mongodb.client.MongoClient,这是Spring Data MongoDB 2.1+版本强制要求的参数类型。 - 客户端创建方式切换:使用官方推荐的
MongoClients工厂类替代直接new MongoClient()的实例化方式,这是MongoDB Java Driver 3.x后的标准用法。
分场景适配细节
基于ServerAddress列表的创建
旧API直接传入地址列表的逻辑,需要通过MongoClientSettings构建器配置集群参数,调用applyToClusterSettings传入地址列表后,再生成客户端实例。基于MongoClientURI的创建
新API的MongoClients.create()支持直接接收字符串类型的连接地址,因此可以直接提取MongoClientURI中的原始连接字符串来创建客户端;如果不需要保留MongoClientURI对象,甚至可以直接拼接字符串后传入,简化代码逻辑。
版本兼容性验证
你的mongo-java-driver 3.9.1完全支持上述新API,MongoClientSettings、MongoClients等核心类在该版本中已稳定存在,无需额外依赖调整。
内容的提问来源于stack exchange,提问作者waffledood
相关产品推荐
相关产品推荐

