Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
Javachevron-right

Driver Java: migrando do 4.11 a 5.0

Maxime Beugnet3 min read • Published Mar 01, 2024 • Updated Mar 01, 2024
MongoDBJava
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

O driver Java do MongoDB 5.0.0 já está disponível!
Embora esta versão não inclua muitos recursos novos, ela está removendo muitos métodos obsoletos e está se preparando para o futuro.

Como fazer a atualização

  • Verifique se a versão do servidoré compatível com o Java Driver 5.0.
  • Compile contra o 4.11 versão do driver com avisos de substituição habilitados.
  • Remova classes e métodos obsoletos.

Maven

1<dependency>
2 <groupId>org.mongodb</groupId>
3 <artifactId>mongodb-driver-sync</artifactId>
4 <version>5.0.0</version>
5</dependency>

Gradle

1implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '5.0.0'

Novas funcionalidades

Você pode ler a lista completa de novos recursos, mas aqui está um resumo.

getElapsedTime()

O comportamento do método getElapsedTime() foi modificado nas classes a seguir:
1com.mongodb.event.ConnectionReadyEvent
2com.mongodb.event.ConnectionCheckedOutFailedEvent
3com.mongodb.event.ConnectionCheckedOutEvent
Se você estiver usando um desses métodos, certifique-se de recompilar e ler os detalhes.

opção authorizedCollection

5.0.0 adiciona suporte à opção authorizedCollectiondo comandolistCollections.

Scala

O org.mongodb.scala.Observable.completeWithUnit() método agora está marcado como obsoleto.

Alterações interruptivas

Uma das melhores maneiras de identificar se seu código exigirá alguma alteração após a atualização para o Java Driver 5.0 é para compilar com 4.11.0 com avisos de descontinuação habilitados e remove o uso de quaisquer métodos e classes obsoletas.
Você pode ler a lista completa de alterações importantes, mas aqui está um resumo.

StreamFactoryFactory e NettyStreamFactoryFactory

Os seguintes métodos e classes foram removidos no 5.0.0:
  • Método streamFactoryFactory() de MongoClientSettings.Builder
  • Método getStreamFactoryFactory() de MongoClientSettings
  • NettyStreamFactoryFactory classe
  • NettyStreamFactory classe
  • AsynchronousSocketChannelStreamFactory classe
  • AsynchronousSocketChannelStreamFactoryFactory classe
  • BufferProvider classe
  • SocketStreamFactory classe
  • Stream classe
  • StreamFactory classe
  • StreamFactoryFactory classe
  • TlsChannelStreamFactoryFactory classe
Se você configurar o Netty usando o streamFactoryFactory(), seu código provavelmente será assim:
1import com.mongodb.connection.netty.NettyStreamFactoryFactory;
2// ...
3MongoClientSettings settings = MongoClientSettings.builder()
4 .streamFactoryFactory(NettyStreamFactoryFactory.builder().build())
5 .build();
Agora, você deve usar o TransportSettings.nettyBuilder():
1import com.mongodb.connection.TransportSettings;
2// ...
3MongoClientSettings settings = MongoClientSettings.builder()
4 .transportSettings(TransportSettings.nettyBuilder().build())
5 .build();

ID de conexão

Em 4.11, a classe ConnectionId estava usando números inteiros.
1@Immutable
2public final class ConnectionId {
3 private static final AtomicInteger INCREMENTING_ID = new AtomicInteger();
4
5 private final ServerId serverId;
6 private final int localValue;
7 private final Integer serverValue;
8 private final String stringValue;
9 // ...
10}
1@Immutable
2public final class ConnectionId {
3 private static final AtomicLong INCREMENTING_ID = new AtomicLong();
4 private final ServerId serverId;
5 private final long localValue;
6 @Nullable
7 private final Long serverValue;
8 private final String stringValue;
9// ...
10}
Embora isso deva ter um impacto muito menor em seu código, ele está quebrando a compatibilidade binária e de origem. Certifique-se de reconstruir seu binário e você deve estar pronto para usar o Go.

Atualização do pacote

Três anotações de registro foram movidas de:
1org.bson.codecs.record.annotations.BsonId
2org.bson.codecs.record.annotations.BsonProperty
3org.bson.codecs.record.annotations.BsonRepresentation
Para:
1org.bson.codecs.pojo.annotations.BsonId
2org.bson.codecs.pojo.annotations.BsonProperty
3org.bson.codecs.pojo.annotations.BsonRepresentation
Portanto, se você estiver usando essas anotações, certifique-se de atualizar as importações e reconstruir.

SocketSettings agora está usando long

Os primeiros parâmetros dos dois seguintes métodos construtores em SocketSettings agora estão usando um longo em vez de um inteiro.
1public Builder connectTimeout(final long connectTimeout, final TimeUnit timeUnit) {/*...*/}
2public Builder readTimeout(final long readTimeout, final TimeUnit timeUnit){/*...*/}
Isso quebra a compatibilidade binária, mas não deve exigir uma alteração em seu código.

Filters.eqFull()

Filters.eqFull() só foi lançado em Beta para pesquisa vetorial. Agora está obsoleto. Em vez disso, useFilters.eq()ao instanciar umVectorSearchOptions.
1VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));

ClusterConnectionMode

A maneira como o driver está calculando o ClusterConnectionMode agora é mais consistente usando um nome de conjunto de réplicas especificado, independentemente de como ele está configurado.
No exemplo a seguir, os drivers 4.11 e 5.0.0 estavam retornando a mesma coisa: ClusterConnectionMode.MULTIPLE.
1ClusterSettings.builder()
2 .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset"))
3 .build()
4 .getMode();
Mas, neste exemplo, o driver 4.11 estava retornando ClusterConnectionMode.SINGLE em vez de ClusterConnectionMode.MULTIPLE.
1ClusterSettings.builder()
2 .hosts(Collections.singletonList(new ServerAddress("127.0.0.1", 27017)))
3 .requiredReplicaSetName("replset")
4 .build()
5 .getMode();

BsonDecimal128

O comportamento de BsonDecimal128 agora é mais consistente com o comportamento de Decimal128.
1BsonDecimal128.isNumber(); // returns true
2BsonDecimal128.asNumber(); // returns the BsonNumber

Conclusão

Com o lançamento do MongoDB Java Driver 5.0.0, é evidente que o foco foi refinar as funcionalidades existentes, remover métodos obsoletos e garantir a compatibilidade para aprimoramentos futuros. Embora as alterações possam exigir alguns ajustes em sua base de código, elas preparam o caminho para uma experiência de desenvolvimento mais robusta e eficiente.
Pronto para atualizar? Mergulhe na versão mais recente dos drivers do MongoDB Java e comece a aproveitar seus recursos aprimorados hoje mesmo!
Para finalizar, não esqueça de habilitar threads virtuais em seu Spring Boot 3.2.0+ projetos! Você só precisa adicionar isto no seu arquivoapplication.properties :
1spring.threads.virtual.enabled=true
Tem dúvidas ou está ansioso para compartilhar seu sucesso? Acesse o MongoDB Community – somos todos ouvidos e prontos para ajudar!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Introdução ao MongoDB Atlas Search e Java


Jul 30, 2024 | 7 min read
Tutorial

Proteja sua API com o Spring Data MongoDB e o Microsoft EntraID


Apr 02, 2024 | 8 min read
Início rápido

Transações ACID multidocumento Java - MongoDB


Mar 01, 2024 | 10 min read
Tutorial

Tutorial de ponta a ponta do Kafka para MongoDB Atlas


Jun 07, 2023 | 6 min read
Sumário