【问题标题】:Spring integration send List to MongoDB outbound channelSpring集成将List发送到MongoDB出站通道
【发布时间】:2018-04-03 00:07:22
【问题描述】:

我需要从 MongoDB 轮询数据,处理数据,在处理数据时,我必须使用 MongoDB 出站通道将 DB 中的数据状态更新为“已处理”。

当我使用入站通道查询 MongoDB 时,我得到一个对象列表。

我使用了一个遍历这个列表并将状态更新为“正在处理”的转换器。

当我将这个更新后的列表(包装为有效负载)传递给出站 MongoDB 通道时,希望它会在数据库中的所有元素更新状态时出现异常。

BasicDBObject 不能转换为 BasicDBList

这里怎么做?

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    您知道,这听起来像是 Spring Data MongoDB 中的一个错误。 我们有一个类似MongoTemplate.toDocument()的代码:

     if (!(objectToSave instanceof String)) {
            Document dbDoc = new Document();
            writer.write(objectToSave, dbDoc);
    

    然后我们跳转到MappingMongoConverter.writeInternal()

        if (Collection.class.isAssignableFrom(entityType)) {
            writeCollectionInternal((Collection<?>) obj, ClassTypeInformation.LIST, (BasicDBList) bson);
            return;
        }
    

    我们确实不能转换为BasicDBList,因为我们原来的bson 就是Document

    您可以考虑在修改每个实体并将它们单独存储回数据库之前使用Splitter,而不是作为列表。

    【讨论】:

    • 感谢您的回答,使用 Splitter 确实是我现在正在做的事情。但我认为允许出站通道一次存储对象列表而不是单独发送每个对象是一个很好的功能
    • 嗯,这正是 MongoDbStoringMessageHandler 试图做的,但 Spring Data MongoDB 有提到的错误。我已经通知了 SD 团队,让我们看看他们会如何回答!也许明天就已经……
    猜你喜欢
    • 2017-07-27
    • 2018-06-21
    • 2015-07-11
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多