#spring-integration
#spring-интеграция
Вопрос:
у меня есть код
<int-jpa:inbound-channel-adapter channel="transactionChannel"
entity-manager="entityManager"
jpa-query="select t from Transaction t ,QueueConfiguration q where t.transactionStatus='RDY2BATCH' and t.partner.partnerId=q.partnerId"
expect-single-result="false">
<int:poller default="true" fixed-delay="150000" />
</int-jpa:inbound-channel-adapter>
<int-jpa:inbound-channel-adapter id="configurationReader"
channel="configurationChannel" entity-manager="entityManager"
jpa-query="select s from Setting s where s.SettingsCategory.categoryId='1'"
expect-single-result="false">
</int-jpa:inbound-channel-adapter>
отсюда начинается мой проект, здесь у меня есть 2 канала, я хочу, чтобы configurationReader выполнялся только один раз при запуске проекта, поскольку он имеет статические значения, которые мне нужно прочитать из БД, и я буду использовать его в своем проекте. как я могу вызвать самый первый раз при запуске проекта?
Ответ №1:
Для этого мы предлагаем использовать Only Once Trigger
раствор:
public class OnlyOnceTrigger implements Trigger {
private final AtomicBoolean done = new AtomicBoolean();
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return !done.getAndSet(true) ? new Date() : null;
}
}
Также вы можете подумать о том, чтобы реагировать на ContextRefreshedEvent
и выполняет то же использование <int-jpa:retrieving-outbound-gateway>
JPAQL.
Комментарии:
1. не могли бы вы дать мне какую-нибудь ссылку для получения дополнительной информации о onlyOnceTrigger и о том, как я могу использовать его в <int-jpa:получение-исходящий-шлюз>
2. и как я могу использовать эти значения в приложении?
3.
<int-jpa:retrieving-outbound-gateway>
? Это совершенно другая история. Вот вы о чем спрашиваете<int-jpa:inbound-channel-adapter>
. Другой компонент, другое поведение — новый вопрос SO. Не уверен насчетvalues
вопроса. Сделайте его более чистым или также задайте новый вопрос SO.4. хорошо, пожалуйста, дайте мне более подробную информацию о том, как я могу использовать <int-jpa:inbound-channel-adapter> для реализации только одного триггерного решения?
5. Этот компонент имеет
<polled>
. Это место, где вы можете вводить onlyOnce вtrigger
атрибут.