spring - 如何轻松配置编解码器?
问题描述
框架使用 LUUID 来存储 java.util.UUID,但我们希望在 mongodb 中以标准 UUID 格式保存。如果我们将 BsonUUIDCodec 配置为 Standard 类型,就可以实现。
我们已经尝试使用 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 和数据库以及其他设置的自定义配置。还有更简单的配置编解码器的方法吗?
解决方案
可以通过 MongoClientSettingsBuilderCustomizer 来完成,类似这样。
@Bean
fun customMongoClientSettings(): MongoClientSettingsBuilderCustomizer {
return MongoClientSettingsBuilderCustomizer {
val codecRegistry = fromRegistries(
fromCodecs(UuidCodec(UuidRepresentation.STANDARD)), getDefaultCodecRegistry()
)
it.codecRegistry(codecRegistry)
}
}
推荐阅读
- amazon-web-services - Tensorflow Serving服务器未启动
- vagrant - Vagrant 无法在配置的(“config.vm.boot_timeout”值)时间段内与客户机通信
- google-cloud-platform - Google Cloud Registry 配额和指标监控
- angular - 从服务器响应加载带有 ngModel 的 html 模板
- python - 在 Django 中使用包含 html 表单和模型表单的表单添加验证错误
- php - 如何在php中转换这个数组?
- node.js - Multer:意外的领域
- python - 如何将组标签分配给具有特定时间间隔内的日期时间的 pandas df 行?
- python - 借助 pyOpt 库中可用的 NLPQL 优化器进行 python 优化
- performance - Julia 的广播速度是 Matlab 的两倍