Driver Java: migrando do 4.11 a 5.0
Avalie esse Artigo
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.
- Compile contra o 4.11 versão do driver com avisos de substituição habilitados.
- Remova classes e métodos obsoletos.
1 <dependency> 2 <groupId>org.mongodb</groupId> 3 <artifactId>mongodb-driver-sync</artifactId> 4 <version>5.0.0</version> 5 </dependency>
1 implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '5.0.0'
O comportamento do método
getElapsedTime()
foi modificado nas classes a seguir:1 com.mongodb.event.ConnectionReadyEvent 2 com.mongodb.event.ConnectionCheckedOutFailedEvent 3 com.mongodb.event.ConnectionCheckedOutEvent
5.0.0 adiciona suporte à opção
authorizedCollection
do comandolistCollections
.O
org.mongodb.scala.Observable.completeWithUnit()
método agora está marcado como obsoleto.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.
Os seguintes métodos e classes foram removidos no 5.0.0:
- Método
streamFactoryFactory()
deMongoClientSettings.Builder
- Método
getStreamFactoryFactory()
deMongoClientSettings
NettyStreamFactoryFactory
classeNettyStreamFactory
classeAsynchronousSocketChannelStreamFactory
classeAsynchronousSocketChannelStreamFactoryFactory
classeBufferProvider
classeSocketStreamFactory
classeStream
classeStreamFactory
classeStreamFactoryFactory
classeTlsChannelStreamFactoryFactory
classe
Se você configurar o Netty usando o
streamFactoryFactory()
, seu código provavelmente será assim:1 import com.mongodb.connection.netty.NettyStreamFactoryFactory; 2 // ... 3 MongoClientSettings settings = MongoClientSettings.builder() 4 .streamFactoryFactory(NettyStreamFactoryFactory.builder().build()) 5 .build();
Agora, você deve usar o
TransportSettings.nettyBuilder()
:1 import com.mongodb.connection.TransportSettings; 2 // ... 3 MongoClientSettings settings = MongoClientSettings.builder() 4 .transportSettings(TransportSettings.nettyBuilder().build()) 5 .build();
Em 4.11, a classe
ConnectionId
estava usando números inteiros.1 2 public 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 2 public final class ConnectionId { 3 private static final AtomicLong INCREMENTING_ID = new AtomicLong(); 4 private final ServerId serverId; 5 private final long localValue; 6 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.
Três anotações de registro foram movidas de:
1 org.bson.codecs.record.annotations.BsonId 2 org.bson.codecs.record.annotations.BsonProperty 3 org.bson.codecs.record.annotations.BsonRepresentation
Para:
1 org.bson.codecs.pojo.annotations.BsonId 2 org.bson.codecs.pojo.annotations.BsonProperty 3 org.bson.codecs.pojo.annotations.BsonRepresentation
Portanto, se você estiver usando essas anotações, certifique-se de atualizar as importações e reconstruir.
Os primeiros parâmetros dos dois seguintes métodos construtores em
SocketSettings
agora estão usando um longo em vez de um inteiro.1 public Builder connectTimeout(final long connectTimeout, final TimeUnit timeUnit) {/*...*/} 2 public 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()
só foi lançado em Beta
para pesquisa vetorial. Agora está obsoleto. Em vez disso, useFilters.eq()
ao instanciar umVectorSearchOptions
.1 VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
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
.1 ClusterSettings.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
.1 ClusterSettings.builder() 2 .hosts(Collections.singletonList(new ServerAddress("127.0.0.1", 27017))) 3 .requiredReplicaSetName("replset") 4 .build() 5 .getMode();
O comportamento de
BsonDecimal128
agora é mais consistente com o comportamento de Decimal128
.1 BsonDecimal128.isNumber(); // returns true 2 BsonDecimal128.asNumber(); // returns the BsonNumber
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 arquivo
application.properties
:1 spring.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.