Какой-то метод myMethod
вызывает несколько параллельных выполнений и ожидает их завершения.
Эти параллельные исполнения могут заканчиваться исключениями. Так myMethod
получается список исключений.
Я хочу передать список исключений в качестве основной причины, но основной причиной может быть только одно исключение. Конечно, я могу создать свое собственное исключение для достижения того, чего я хочу, но я хочу знать, есть ли что-то подобное в Java, Spring или Spring Batch.
AggregateException
список исключений. Эта идея должна быть применима и к Java.Ответы:
Я не уверен, что сделал бы это (хотя, учитывая JavaDoc, я не мог сказать вам, почему я колебался), но есть список исключенных исключений
Throwable
, к которым вы можете добавить с помощьюaddSuppressed
. JavaDoc, похоже, не говорит, что это только для JVM для использования в try-with-resources:Обратите внимание на последний абзац, который, кажется, подходит для вашего случая.
источник
Исключения и их причины всегда имеют значение 1: 1: вы можете выдать одно исключение, и каждое исключение может иметь только одну причину (которая снова может иметь одну причину ...).
Это можно считать ошибкой проектирования, особенно если учесть многопоточное поведение, как вы описали.
Это одна из причин, по которой Java 7 добавлена
addSuppressed
в throwable, которое может в основном присоединять произвольное количество исключений к одному другому (другой основной мотивацией была попытка с ресурсами, которой требовался способ обработки исключений в блоке finally без скрытого отбрасывания их).Таким образом, в основном, когда у вас есть 1 исключение, которое приводит к сбою вашего процесса, вы добавляете это как причину вашего исключения более высокого уровня, а если у вас есть еще, то вы добавляете их к исходному с помощью
addSuppressed
. Идея состоит в том, что это первое исключение «подавляет» других, становясь членом «реальной цепи исключений».Образец кода:
источник