框架使用LUUID来存储java.util.UUID,但是我们希望将其以标准UUID格式保存在mongodb中。如果我们将BsonUUIDCodec配置为标准类型,则可以实现。
我们已经尝试使用bean ReactiveMongoDatabaseFactory进行配置来配置编解码器。它可以工作,但令人不舒服,我们还需要提供数据库,uri等。
我们的实现:
@Bean
fun mongoFactory(
environment: ConfigurableEnvironment
): ReactiveMongoDatabaseFactory {
val builder = MongoClientSettings.builder()
val codecRegistry =
fromRegistries(fromCodecs(UuidCodec(UuidRepresentation.STANDARD)), getDefaultCodecRegistry())
builder.codecRegistry(codecRegistry)
val database = requireNotNull(environment.getProperty(DATABASE_PROPERTY)) { "Database must be specified" }
val uri = requireNotNull(environment.getProperty(URI_PROPERTY)) { "URI must be specified" }
val connectionString = if (!uri.contains(database)) {
"$uri/$database"
} else {
uri
}
builder.applyConnectionString(ConnectionString(connectionString))
val mongoClient = MongoClients.create(builder.build())
return SimpleReactiveMongoDatabaseFactory(mongoClient, database)
}
我们希望提供编解码器而不覆盖其他设置,例如uri和数据库以及其他设置的自定义配置。 还有更简单的配置编解码器的方法吗?
答案 0 :(得分:0)
可以通过MongoClientSettingsBuilderCustomizer完成,就像这样。
@Bean
fun customMongoClientSettings(): MongoClientSettingsBuilderCustomizer {
return MongoClientSettingsBuilderCustomizer {
val codecRegistry = fromRegistries(
fromCodecs(UuidCodec(UuidRepresentation.STANDARD)), getDefaultCodecRegistry()
)
it.codecRegistry(codecRegistry)
}
}