Стандартный кодек UUID Spring Boot не работает с AbstractMongoClientConfiguration - PullRequest
2 голосов
/ 27 октября 2019

Я обновился до Spring Boot 2.2.0.RELEASE и хотел заменить устаревшую AbstractMongoConfiguration на AbstractMongoClientConfiguration. Я использую

codecRegistries.add(CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)));

, чтобы установить для кодека UUID в MongoDB значение STANDARD (UUID) вместо устаревшего кодека (LUUID). При просмотре базы данных кодек остается в устаревшем формате. Кто-нибудь еще сталкивался с такой же проблемой?

Старая реализация (рабочая):

@Override
public MongoClient mongoClient() {
CodecRegistry codecRegistry =
                CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)),
                        MongoClient.getDefaultCodecRegistry());
        return new MongoClient(new ServerAddress(address, port), MongoClientOptions.builder().codecRegistry(codecRegistry).build());
}

Новая реализация (не работает):

@Override
public MongoClient mongoClient() {
        List<CodecRegistry> codecRegistries = new ArrayList<>();
        codecRegistries.add(CodecRegistries.fromCodecs(new DocumentCodec()));
        codecRegistries.add(CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)));
        CodecRegistry codecRegistry = CodecRegistries.fromRegistries(codecRegistries);

        return MongoClients.create(MongoClientSettings.builder()
                                                      .codecRegistry(codecRegistry)
                                                      .applyConnectionString(new ConnectionString(connectionString))
                                                      .build());
}

Я ожидал, что кодек UUID вбаза данных для настройки на стандартный кодек, но она остается в устаревшем кодеке.

1 Ответ

0 голосов
/ 14 ноября 2019

Я нашел решение проблемы. new UuidCodec(UuidRepresentation.STANDARD) должен быть на первой позиции. Мой код выглядит следующим образом:

    private static final CodecRegistry CODEC_REGISTRY = CodecRegistries.fromProviders(
        Arrays.asList(new UuidCodecProvider(UuidRepresentation.STANDARD),
                      new ValueCodecProvider(),
                      new BsonValueCodecProvider(),
                      new DBRefCodecProvider(),
                      new DBObjectCodecProvider(),
                      new DocumentCodecProvider(new DocumentToDBRefTransformer()),
                      new IterableCodecProvider(new DocumentToDBRefTransformer()),
                      new MapCodecProvider(new DocumentToDBRefTransformer()),
                      new GeoJsonCodecProvider(),
                      new GridFSFileCodecProvider(),
                      new Jsr310CodecProvider(),
                      new BsonCodecProvider()));

Такое поведение не очень хорошее и, возможно, это ошибка. Надеюсь, что это поможет некоторым из вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...