升级驱动程序版本
Overview
在此部分中,您可以确定需要对应用程序进行哪些更改,以便将驱动程序升级到新版本。
升级前,请执行以下操作:
确保新版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的Java运行时环境 (JRE) 兼容。 有关此信息,请参阅 Java兼容性页面。
在破坏性变更 (breaking change) 部分解决应用程序使用的驱动程序的当前版本与计划升级版本之间发生的任何破坏性变更 (breaking change)。要了解有关 MongoDB 服务器版本兼容性变更的更多信息,请参阅服务器版本兼容性变更部分。
提示
如需尽量减少应用程序将来升级驱动程序版本时可能需要的更改,请使用“稳定版 API”。
重大更改
重大更改是对特定版本驱动程序中的约定或行为进行的修改,如果在升级前未加以解决,可能会阻止您的应用程序正常运行。
本部分中的重大更改按引入它们的驱动程序版本进行分类。升级驱动程序版本时,请解决当前版本和升级版本之间的所有重大更改。例如,如果您要将驱动程序从 v4.0 升级到 v4.5,请解决 v4.0 之后的版本的所有重大更改,包括 v4.5 下列出的任何更改。
版本 4.8 重大更改
驱动程序不再支持连接到 MongoDB Server v3.4 及更早版本。如要了解有关此更改的更多信息,请参阅版本 4.8 服务器发布支持更改部分。
如果您的应用程序在 OSGi 容器中部署驱动程序并依赖该驱动程序来编码和解码 Java 记录,则必须添加对
org.bson.codecs.record
模块的显式依赖项。在 v4.6 中实施的
RecordCodec
反序列化 POJO 和记录类,这些 POJO 和记录类被指定为记录的List
或Map
字段的类型参数,作为Document
值而不是各自的类。此版本现在将它们反序列化为正确的记录和 POJO 类型。例如,以下记录类定义显示的
Book
记录包含一个接收Chapter
类型参数的List
:public record Book(String title, List<Chapter> chapters) {} public record Chapter(Integer number, String text) {} 从此版本开始,编解码器将
List
中的数据反序列化为Chapter
记录类,而不是Document
值。
版本 4.7 重大更改
setWindowFields
构建器 API 不再处于测试阶段。新的构建器破坏了二进制和源代码兼容性。有关新的setWindowFields()
方法签名的信息,请参阅聚合 API 文档。如果您的应用程序在 v4.7 之前的版本中使用此构建器,请更新源代码以使用新的方法签名并重建二进制文件。
版本 4.2 破坏性更改
ObjectId
类及其serialVersionUID
字段已更新为使用新格式,这会最大限度减少不同版本的驱动程序之间的序列化兼容性问题。如果使用此版本或更高版本驱动程序的应用程序尝试对任何包含
ObjectId
且由先前版本的驱动程序序列化的对象执行 Java 对象序列化,则 Java 会引发InvalidClassException
。如需了解有关“Java 对象序列化”的更多信息,请参阅 Java 文档中的可序列化对象部分。
版本 4.0 重大更改
3.12 版本中标记为已弃用的几个类和方法在此版本中已删除。
插入助手方法返回插入结果对象,而不是
void
。BsonDocument
、Document
和DbObject
上的toJson()
方法返回宽松 JSON 格式,而不是严格 JSON 格式。这增加了 JSON 文档的可读性,但也更难以识别 BSON 类型信息,例如 32 位和 64 位整数之间的差异。如果应用程序依赖于严格 JSON 格式,请在读取或写入数据时使用严格模式。请参阅文档数据格式:扩展 JSON 指南,了解如何在当前 API 中指定 JSON 格式。java.util.UUID
值的默认 BSON 表示形式从JAVA_LEGACY
更改为UNSPECIFIED
。 存储或检索 UUID 值的应用程序必须显式指定要使用的表示形式。您可以在MongoClientSettings
的uuidRepresentation
属性中指定表示形式。您指定的 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-driver
和mongodb-driver
均不再发布。如果您的应用程序依赖其中一项,则必须根据应用程序使用的 API 切换到mongodb-driver-sync
或mongodb-driver-legacy
。确保从依赖项中删除 uber JAR。对多个类的更新引入了二进制兼容性中断,例如插入辅助方法的方法签名更改。针对此版本或更高版本重新编译所有链接到驱动程序的类,以确保它们继续运行。
服务器版本兼容性更改
服务器版本兼容性更改是对 MongoDB Java 驱动程序的修改,不再支持一组 MongoDB 服务器版本。
该驱动程序在 MongoDB Server 版本的生命周期结束 (EOL) 后将停止支持。
要了解有关 MongoDB 支持 EOL 产品的更多信息,请参阅旧版支持政策。
4.8 版服务器版本支持更改
v4.8 驱动程序不再支持 MongoDB Server v3.4 及更早版本。如要使用 v4.8 驱动程序,您的 MongoDB Server 必须是 v3.6 或更新版本。如要了解如何升级 MongoDB Server 部署,请参阅 MongoDB Server 手册中的发行说明。