2015-03-02 4 views
1
<int-file:inbound-channel-adapter 
    directory="#{dir}" 
    channel="inp" filename-regex="^.*\.(xml|lst)$" prevent-duplicates="false"> 
    <int:poller max-messages-per-poll="1" cron ="#{timer}"/> 
</int-file:inbound-channel-adapter> 

Есть ли способ запустить вышеуказанный входящий канал-адаптер перед срабатыванием poller? Обычно Poller срабатывает примерно раз в день, но иногда мне нужна немедленная операция, основанная на взаимодействии пользователя (когда пользователь нажимает на «начать» кнопку)Есть ли способ вручную запустить адаптер входящего канала? [Весоизмерительная интеграция]

Спасибо,

Ференц

ответ

1

Для Вас информации: любой inbound-channel-adapter может быть started/stopped вручную (вы должны указать id для этого компонента). Но мы должны понимать, что это пока не помогает. Потому что любая деятельность основана на trigger.

Как я вижу ваше требование немедленно начать опрос пользовательским событием, поэтому вы должны предоставить соответствующую Trigger реализацию. Например. OnlyOnceTrigger

Я бы предположить, чтобы добавить еще один <int-file:inbound-channel-adapter> с теми же параметрами и тем же channel, но с этим пользовательским триггером не сломать cron логики. Этот новый <int-file:inbound-channel-adapter> должен быть помечен как auto-startup="false". Пользователь start кнопка как раз должен start() этот компонент и, да, stop немедленно. Будет запущена одна задача опроса.

Здесь вы должны подумать о некотором OnlyOnceTriggerreset(), чтобы он мог начать новую задачу опроса при следующем нажатии кнопки.

Да, вы можете даже реализовать некоторые сложные Trigger включая как crononce инициирующих операции, чтобы избежать более <int-file:inbound-channel-adapter> один, но это будет уже до вас.

+0

Как часто вызывается метод nextExecutionTime()? Какова была ситуация, когда мой подольщик срабатывает только один раз в день? визуализации следующие сроки : 10:10 - Poller пожары 10:20 - пользователь нажал на кнопку START мы должны ждать следующего дня 10:10, когда система вызывает nextExecutionTime(), чтобы определить следующий протекании Дата? –

+0

К сожалению, 'Trigger' ничего не делает сам. Вся тяжелая работа выполняется в реализации «TaskScheduler # schedule (Runnable task, Trigger trigger)». Этот 'TaskScheduler' вычисляет следующую дату пожара и заполняет задачу внутреннему' executor'. Окончание этой задачи инициирует вычисление для следующего планирования. Таким образом, любые пользовательские пожары не будут влиять на те задачи, которые уже запланированы. Вот почему я думаю, что вы не сможете реализовать все в одном триггере и, следовательно, один «входящий канал-адаптер» –

Смежные вопросы