Я заметил следующее неожиданное поведение и могу воспроизвести его с помощью примера Spring Integration basic / jdbc.
Запустите пример Spring Integration sample basic / jdbc и сразу же попытайтесь найти имя, которое не существует, то есть запустить с использованием Spring Integration sample basic / jdbc run Main.java, введите 1 в поле Find person, введите Mark
Выдается исключение ReplyRequiredException, поскольку строка не найдена. Если я изменю определение int-jdbc: outbound-gateway в spring-integration-context.xml на использование requiresReply = "false", то вызов findPersonByName будет блокироваться до тех пор, пока int: gateway не истечет по истечении заданных 5 секунд.
Это очень типичная операция, когда я хочу использовать Spring Integration jdbc: outbound-gateway для возврата списка из 0 или более элементов. Кажется, он отлично работает для размеров результата 1 или более. Однако при обнаружении 0 результатов любое поведение нежелательно. Мне не нужно исключение, потому что иногда такое поведение ожидается, и я также не хочу блокировать до истечения времени ожидания. В случае исключения я могу использовать try / catch, но фреймворк регистрирует исключение на уровне WARN, и я не хочу обрабатывать ожидаемое поведение, возвращено 0 элементов, с обработкой исключений, try / catch. Есть ли способ настроить поток в Spring Integration sample basic / jdbc для возврата без блокировки или выдачи исключения, когда имя не найдено, т.е. просто вернуть пустой список?