Пакет Spring 2.1 и JmsReader

У меня есть одно весеннее пакетное приложение, которое можно запустить из командной строки. Поток пакетного задания - это когда оно запускается, оно считывает сообщение из очереди, затем преобразует его и записывает в базу данных. Теперь для этого я использую JmsItemReader из весенней партии и внутри метода read (), у меня есть своя логика. Теперь вопрос в том, что может быть вероятность того, что при запуске этого процесса в очереди нет сообщения, в этом сценарии я хочу остановить обработку всего пакета.

Как этого добиться в весенней партии? В основном, что происходит, когда вы используете JmsItemReader, он постоянно пингует брокера jms и читает сообщение, а затем спит в течение определенного периода времени. Теперь, если нет сообщения для обработки, тогда почему мы должны держать пакетный процесс запущенным и позволять ему использовать ЦП. Я хочу, чтобы он снова запустился на следующий день по расписанию.

Спасибо


person javauser2011    schedule 24.07.2011    source источник


Ответы (1)


это поведение исходит из конфигурации по умолчанию для jmstemplate, которая предоставляется spring-jms

значение по умолчанию для timeOut не определено

private long receiveTimeout = RECEIVE_TIMEOUT_INDEFINITE_WAIT;

с этим значением messageconsumer.receive () будет использоваться

Получает следующее сообщение, созданное для этого потребителя сообщений. Этот вызов блокируется на неопределенный срок, пока не будет создано сообщение или пока этот потребитель сообщения не будет закрыт.

поэтому вам нужно установить значение тайм-аута для jmstemplate

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

затем получить (long timeOut) будет использоваться

Этот вызов блокирует до поступления сообщения, истечения тайм-аута или закрытия этого потребителя сообщения. Нулевой тайм-аут никогда не истекает, и вызов блокируется на неопределенный срок.

если вы используете значение -1, вызов происходит немедленно

person Michael Pralow    schedule 28.07.2011