在我的开发工作中,我必须使用Spring批处理JmsItemReader来读取来自Hornetq的消息。我正在尝试将JMS消息回滚到队列的测试场景,以防春季批处理过程中出现错误。但这对我不起作用。
例如:显示回滚计数的春季步骤执行表为1。但实际上我并没有将消息回滚到队列中。
我在xml中使用了以下配置。
<batch:job id="submitOrderJmsToWebServiceJob">
<batch:step id="submitOrderJmsToLocateStep">
<batch:tasklet transaction-manager="myTxManager">
<batch:chunk reader="jmsMessageReader" reader-transactional-queue="true" processor="jmsMessageProcessor"
writer="jmsMessageToWebSeviceWriter" commit-interval="1" />
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="jmsMessageReader" class="org.springframework.batch.item.jms.JmsItemReader">
<property name="jmsTemplate" ref="orderJmsTemplate" />
</bean>
<bean id="myTxManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="ConnectionFactory"/>
</bean>
我在springJMS模板bean中使用以下属性解决了这个问题。
<property name="sessionTransacted" value="true" />
现在jms消息可以回滚了。注意:我已经删除了tasklet标记中的transaction-manager属性等旧配置,并且在chunk中为transactional-queue=true。