Spring batch 弹簧批2.1和JmsReader

Spring batch 弹簧批2.1和JmsReader,spring-batch,Spring Batch,我有一个spring批处理应用程序,可以从命令行运行。批处理作业的流程是,当它启动时,从队列中读取消息,然后进行转换并写入数据库。现在,我使用的是来自spring批处理的JmsItemReader和内部read()方法,我有自己的逻辑。现在的问题是,当这个过程开始时,队列中可能没有消息,在这种情况下,我想停止处理整个批处理 如何在春季批次中实现这一点?基本上,当您使用JmsItemReader时会发生什么,它会持续ping jms代理并读取消息,然后休眠一段时间。现在,如果没有要处理的消息,那么

我有一个spring批处理应用程序,可以从命令行运行。批处理作业的流程是,当它启动时,从队列中读取消息,然后进行转换并写入数据库。现在,我使用的是来自spring批处理的JmsItemReader和内部read()方法,我有自己的逻辑。现在的问题是,当这个过程开始时,队列中可能没有消息,在这种情况下,我想停止处理整个批处理

如何在春季批次中实现这一点?基本上,当您使用JmsItemReader时会发生什么,它会持续ping jms代理并读取消息,然后休眠一段时间。现在,如果没有要处理的消息,那么为什么我们要让批处理进程继续运行,让它消耗CPU。我想让它第二天按照计划再次运行


谢谢,这种行为来自SpringJMS提供的jmstemplate的默认配置

超时的默认值是不确定的

private long receiveTimeout = RECEIVE_TIMEOUT_INDEFINITE_WAIT;
使用此值,将使用

接收为此消息使用者生成的下一条消息这个 调用将无限期阻塞,直到生成消息或 消息使用者已关闭

因此,您需要为jmstemplate设置一个超时值

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
     (...)
     <property name="receiveTimeout" value="someLongValueForMilliseconds" />
     (...)
</bean>

(...)
(...)
然后将使用

此调用阻止,直到消息到达、超时过期,或 消息使用者已关闭。零超时永远不会过期,并且 无限期呼叫阻塞

如果使用值-1,则调用立即发生