Docs 菜单
Docs 主页
/ / /
java sync

升级驱动程序版本

在此页面上

  • Overview
  • 重大更改
  • 服务器版本兼容性更改

在此部分中,您可以确定需要对应用程序进行哪些更改,以便将驱动程序升级到新版本。

升级前,请执行以下操作:

  • 确保新版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的Java运行时环境 (JRE) 兼容。 有关此信息,请参阅 Java兼容性页面。

  • 破坏性变更 (breaking change) 部分解决应用程序使用的驱动程序的当前版本与计划升级版本之间发生的任何破坏性变更 (breaking change)。要了解有关 MongoDB 服务器版本兼容性变更的更多信息,请参阅服务器版本兼容性变更部分。

提示

如需尽量减少应用程序将来升级驱动程序版本时可能需要的更改,请使用“稳定版 API”。

重大更改是对特定版本驱动程序中的约定或行为进行的修改,如果在升级前未加以解决,可能会阻止您的应用程序正常运行。

本部分中的重大更改按引入它们的驱动程序版本进行分类。升级驱动程序版本时,请解决当前版本和升级版本之间的所有重大更改。例如,如果您要将驱动程序从 v4.0 升级到 v4.5,请解决 v4.0 之后的版本的所有重大更改,包括 v4.5 下列出的任何更改。

  • 驱动程序不再支持连接到 MongoDB Server v3.4 及更早版本。如要了解有关此更改的更多信息,请参阅版本 4.8 服务器发布支持更改部分。

  • 如果您的应用程序在 OSGi 容器中部署驱动程序并依赖该驱动程序来编码和解码 Java 记录,则必须添加对 org.bson.codecs.record 模块的显式依赖项。

  • 在 v4.6 中实施的 RecordCodec 反序列化 POJO 和记录类,这些 POJO 和记录类被指定为记录的 ListMap 字段的类型参数,作为 Document 值而不是各自的类。此版本现在将它们反序列化为正确的记录和 POJO 类型。

    例如,以下记录类定义显示的 Book 记录包含一个接收 Chapter 类型参数的 List

    public record Book(String title, List<Chapter> chapters) {}
    public record Chapter(Integer number, String text) {}

    从此版本开始,编解码器将List中的数据反序列化为Chapter记录类,而不是Document值。

  • setWindowFields 构建器 API 不再处于测试阶段。新的构建器破坏了二进制和源代码兼容性。有关新的 setWindowFields() 方法签名的信息,请参阅聚合 API 文档

    如果您的应用程序在 v4.7 之前的版本中使用此构建器,请更新源代码以使用新的方法签名并重建二进制文件。

  • ObjectId 类及其 serialVersionUID 字段已更新为使用新格式,这会最大限度减少不同版本的驱动程序之间的序列化兼容性问题。

    如果使用此版本或更高版本驱动程序的应用程序尝试对任何包含 ObjectId 且由先前版本的驱动程序序列化的对象执行 Java 对象序列化,则 Java 会引发 InvalidClassException

    如需了解有关“Java 对象序列化”的更多信息,请参阅 Java 文档中的可序列化对象部分。

  • 3.12 版本中标记为已弃用的几个类和方法在此版本中已删除。

  • 插入助手方法返回插入结果对象,而不是 void

  • BsonDocumentDocumentDbObject 上的 toJson() 方法返回宽松 JSON 格式,而不是严格 JSON 格式。这增加了 JSON 文档的可读性,但也更难以识别 BSON 类型信息,例如 32 位和 64 位整数之间的差异。如果应用程序依赖于严格 JSON 格式,请在读取或写入数据时使用严格模式。请参阅文档数据格式:扩展 JSON 指南,了解如何在当前 API 中指定 JSON 格式。

  • java.util.UUID值的默认 BSON 表示形式从 JAVA_LEGACY 更改为 UNSPECIFIED。 存储或检索 UUID 值的应用程序必须显式指定要使用的表示形式。您可以在MongoClientSettingsuuidRepresentation属性中指定表示形式。

    您指定的 UUID 表示严格控制驱动程序解码 UUID 的方式。在以前版本的驱动程序中,如果指定 JAVA_LEGACY 表示,驱动程序会将子类型 3 和 4 的二进制对象解码为 UUID。在版本 4.0 中,JAVA_LEGACY 表示仅适用于子类型 3。

    有关 UuidRepresentation 枚举的成员列表,请参阅 v4.0 API 文档。

  • 连接池不再限制需要连接 MongoDB 的等待队列线程或异步任务的数量。应用程序应根据需要限制请求,而不是依赖驱动程序来抛出 MongoWaitQueueFullException

  • 驱动程序不再使用 java.util.logging (JUL) 包进行日志记录,仅支持 SLF4J 日志记录框架。

  • 嵌入式和 Android 驱动程序已被删除。如果您的应用程序依赖于这些驱动程序,则必须继续使用 3.x Java 驱动程序版本。

  • uber JAR、mongo-java-drivermongodb-driver 均不再发布。如果您的应用程序依赖其中一项,则必须根据应用程序使用的 API 切换到 mongodb-driver-syncmongodb-driver-legacy。确保从依赖项中删除 uber JAR。

  • 对多个类的更新引入了二进制兼容性中断,例如插入辅助方法的方法签名更改。针对此版本或更高版本重新编译所有链接到驱动程序的类,以确保它们继续运行。

服务器版本兼容性更改是对 MongoDB Java 驱动程序的修改,不再支持一组 MongoDB 服务器版本。

该驱动程序在 MongoDB Server 版本的生命周期结束 (EOL) 后将停止支持。

要了解有关 MongoDB 支持 EOL 产品的更多信息,请参阅旧版支持政策

  • v4.8 驱动程序不再支持 MongoDB Server v3.4 及更早版本。如要使用 v4.8 驱动程序,您的 MongoDB Server 必须是 v3.6 或更新版本。如要了解如何升级 MongoDB Server 部署,请参阅 MongoDB Server 手册中的发行说明

后退

兼容性