Spring集成将List发送到MongoDB出站通道

时间:2018-04-01 11:43:28

标签: spring spring-integration

我需要从MongoDB轮询数据,处理数据,在处理数据时,我必须更新数据库中数据的状态为" PROCESSED"使用MongoDB出站通道。

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

我使用一个遍历此列表的变换器并将状态更新为" PROCESSING"。

当我将此更新列表(包装为有效负载)传递到出站MongoDB通道时,希望它会更新状态,如果数据库中有所有元素,我会得到异常。

  

BasicDBObject无法强制转换为BasicDBList

如何在这里继续?

1 个答案:

答案 0 :(得分:0)

你知道,听起来像Spring Data MongoDB中的一个bug。 我们有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,而不是列表。