как решить, какой канал вызывать первым?

#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 атрибут.