Моя системная диаграмма прилагается.
Системная диаграмма
КАК РАБОТАЕТ ПОТОК:
Поток интеграции пружинычитает входные данные из файла json на C: \ и выполняет 2 действия:
Сохранение в БД
Уведомление / печать для пользователя
ВАЖНЫЕ КРИТЕРИИ:
Я хочу, чтобы хранилище в потоке БД не зависело от бизнес-логики (печать для пользователя / уведомления), т. Е. БД exception/DB
успех не должен влиять на уведомление пользователя.
Аналогичным образом уведомление пользователя не должно влиять на поток данных.
Я просмотрел и обнаружил, что должен использовать канал исполнителя для передачи «хранилища в БД» другому.нить.
Я не могу найти пример кода для канала выполнения. Мне нужен ТОЛЬКО код, основанный на АННОТАЦИЯХ, поскольку все остальные классы основаны на аннотациях .
ЧТО МНЕ НУЖНО: Пример кода из ExecutorChannel - на основе аннотаций.
Код внутри 2 (считывает json из файла и отправляет его в БД, логика собственного дела)
@Bean
public IntegrationFlow readFromJSONFile() {
return IntegrationFlows
.from("/path/to/File")
.transform("Transformer to convert to Bean")
.wireTap(
flow -> flow.handle(msg -> logger
.info("Message sent to common channel: " + msg.getPayload())))
.channel("Common Channel Name")
.get();
}
Код внутри 4:
@Bean
public IntegrationFlow sendToDb() {
return IntegrationFlows
.from("Common Channel Name")
.handle("DAO Impl to store into DB") // I THINK THE MESSAGE SHOULD BE SENT TO AN EXECUTOR CHANNEL TO PROCESS ON A SEPARATE THREAD
.get();
}
Код внутри 5:
@Bean
public IntegrationFlow sendToBusinessLogictoNotifyUser() {
return IntegrationFlows
.from("Common Channel Name")
.handle("Business Logic Class name")
.get();
}
Текущее поведение: Если есть исключение БД, уведомить пользователя также не удается.Вместо этого я хочу, чтобы это было тихо зарегистрировано.
ПРИМЕЧАНИЕ: Мне нужен пример только аннотации.