Podczas korzystania z adnotacji Spring @Async
abstrakcja jest nieszczelna, jeśli chodzi o (zaznaczone) wyjątki w klauzuli throws
tej metody. Kompilator zmusi wywołującego do obsługi wyjątku, ale w rzeczywistości wywołujący nigdy nie zobaczy wyjątków generowanych przez metodę @Async
. Zamiast tego, w zależności od implementacji, będzie on obsługiwany przez & logowany przez Spring, lub przekazywany do skonfigurowanej przez użytkownika obsługi wyjątków, lub produkowany, gdy wywoływana jest Future#get()
przy zwracanej wartości.Abstrakcja Spring @ Synchronizacja jest nieszczelna w odniesieniu do obsługi wyjątków
Dlatego też formułuję opinię, że metody z reguły nie powinny zrzucać sprawdzonych wyjątków. Zamiast tego powinny zawijać wszystkie zaznaczone wyjątki w typach RuntimeException
, aby nie występować klauzula throws
.
Czy to jest dokładna ocena? Czy istnieje jakieś narzędzie lub programowanie, które naprawia wyciek? Czy ktokolwiek zdaje sobie sprawę z tego, co myślą o tym wiosenni programiści, lub czy są jakieś plany poprawy sytuacji? Dzięki!
prawdopodobnie związane: Spring Async method hides exceptions
Generalnie Wiosna preferuje niesprawdzonych wyjątki (spojrzeć na tłumaczenie wyjątków w Spring danych), a to naprawdę nie jest to możliwe dla metoda asynchroniczna do rzucania czegokolwiek (właśnie dlatego 'Future' opakowuje wyjątki). – chrylis
Prawdziwy problem zaczyna się, gdy metoda @ Async'ed nie zwraca żadnej wartości. Pojawiają się ciekawe rzeczy;) –
Co ciekawego konkretnie, R4J? – Jukka