在Spring集成中借助mongo入站适配器分页数据

时间:2014-11-01 08:10:52

标签: mongodb spring-integration

我正在使用mongo入站适配器从mongo中检索数据。目前我正在使用以下配置。

<int-mongo:inbound-channel-adapter
        id="mongoInboundAdapter" collection-name="updates_IPMS_PRICING"
        mongo-template="mongoTemplatePublisher" channel="ipmsPricingUpdateChannelSplitter"
        query="{'flagged' : false}" entity-class="com.snapdeal.coms.publisher.bean.PublisherVendorProductUpdate">
        <poller max-messages-per-poll="2" fixed-rate="10000"></poller>
    </int-mongo:inbound-channel-adapter>

我的数据库中有大约20条记录符合上述查询的条件,但由于我给出了每个轮询的最大消息数值2,我预计每次轮询最多可获得2条记录。 但我得到的所有记录都符合上述查询的条件。不确定我做错了什么。

2 个答案:

答案 0 :(得分:2)

实际上我建议为New Feature提出query-expression JIRA ticket以允许指定org.springframework.data.mongodb.core.query.Query构建器,其中skip()和{{1}选项,从那里你的问题可以修复如下:

limit()

答案 1 :(得分:1)

mongo适配器旨在返回包含每个轮询的查询结果集合的单个消息。所以max-messages-per-poll在这里没有任何区别。

max-messages-per-poll用于使轮询器短路,在您的情况下,第二次轮询立即完成,而不是再等待10秒。经过2次民意调查,我们再次等待。

为了实现分页,您需要使用query-expression而不是query,并在每个轮询的查询中包含某个状态。

例如,如果文档有一些增量值,您可以在bean中存储该值,并使用下一轮询中的值来获取下一个值。