mongodb spring-boot 2.3.6,如何为mongo设置UUID表示?

qnakjoqk  于 2023-08-04  发布在  Go
关注(0)|答案(3)|浏览(133)

我正在尝试升级到spring-boot 2.3.6。我使用的是spring-data MongoRepositories,没有直接调用MongoClient或MongoClient。
获取异常:

Caused by: org.bson.codecs.configuration.CodecConfigurationException: The uuidRepresentation has not been specified, so the UUID cannot be encoded.
    at org.bson.codecs.UuidCodec.encode(UuidCodec.java:72)
    at org.bson.codecs.UuidCodec.encode(UuidCodec.java:37)
    at org.bson.codecs.EncoderContext.encodeWithChildContext(EncoderContext.java:91)
    at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:198)
    at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:212)
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:154)
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45)

字符串
尝试自定义

@Bean
    public MongoClientSettingsBuilderCustomizer mongoDBDefaultSettings() {
        return builder -> {
            builder.uuidRepresentation(UuidRepresentation.JAVA_LEGACY);
        };
    }


没有帮助,同样的例外。
在spring-boot 2.3.6中自定义UUID编解码器的正确方法是什么?

  • 谢谢-谢谢
soat7uwm

soat7uwm1#

在Sping Boot application.properties上,只需通知:

spring.data.mongodb.uuid-representation=standard

字符串

g6ll5ycj

g6ll5ycj2#

当你定义了一个普通的MongoClient bean时,就会发生这种情况,例如:

@Bean
public MongoClient mongoClient() {
    return MongoClients.create(MongoClientSettings.builder().build());
}

字符串
您可以使用MongoClientSettingsBuilderCustomizer自定义自动配置的MongoClient。(请注意,对于Sping Boot 的后续版本,如果使用自动配置的MongoClient,则不需要自定义,因为默认情况下,从Spring Boot 2.4.2开始,MongoProperties将UUID表示设置为JAVA_LEGACY
根据doc
自动配置的MongoClient使用MongoClientSettings创建。要微调其配置,请声明一个或多个MongoClientSettingsBuilderCustomizer bean。每一个都将通过用于构建MongoClientSettings的MongoClientSettings.Builder按顺序调用。
如果您需要自定义MongoClient,您可以显式设置UUID表示,例如:

@Bean
public MongoClient mongoClient() {
    return MongoClients.create(MongoClientSettings.builder()
               .uuidRepresentation(UuidRepresentation.JAVA_LEGACY)
               .build());
}

zlwx9yxi

zlwx9yxi3#

对于MongoDB 4.3或更高版本,这是适合我的修复。

MongoClientSettings settings = MongoClientSettings.builder()
     .uuidRepresentation(UuidRepresentation.STANDARD)
     .build();

字符串

相关问题