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