从mongo中获取更改,并使用Kotlin和Spring将其明确转换为所需的类型

问题描述

我们使用MongoDB Changestream,而springdata使其变得非常容易,因为我们可以在正确的Kotlin对象中正确获取数据。但有个问题: 当我们更改对象的结构并进行部署时,更改流可能包含旧结构中的对象。并且我们收到“监听MongoDB时发生意外错误”。

要在以后的更改中也解决此问题,我们希望以通用格式(例如JSON)检索更改,并在try / catch块内的额外步骤中进行反序列化

我们的代码如下:

val results = mutablelistof<OurDomainType>()
val container: MessageListenerContainer = DefaultMessageListenerContainer(mongoTemplate)
val listener: MessageListener<ChangeStreamDocument<Document>,OurDomainType> =
  MessageListener {
    message ->
      val changeStreamMessage = message.raw!!

      if (results.size == maxRecordCount) {
        container.stop()
        return @MessageListener
      }

    if (message.body != null) {
      results.add(message.body!!)
    }

    newCheckpoint = (changeStreamMessage.resumetoken.asDocument()["_data"] as BsonString).value
  }

container.register(
  ChangeStreamRequest<OurDomainType>(listener,changeStreamRequestOptions),OurDomainType::class.java)
container.start()
Thread.sleep(maxRequestTimeMs)
container.stop()

return newCheckpoint to results

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)