2015-01-16 12 views
5

Spring'in @Async ek açıklamasını kullanırken, bu yöntem, yöntemin throws maddesindeki istisnalar (kontrol edilen) söz konusu olduğunda sızıntıya neden olur. Derleyici arayanı istisna işlemeye zorlar, ancak gerçekte arayan kişi asla @Async yöntemi tarafından atılan istisnaları görmez. Bunun yerine, uygulamaya bağlı olarak, & Spring tarafından kaydedilen veya kullanıcı tarafından yapılandırılan bir özel durum işleyicisine verilen veya döndürme değerinde Future#get() çağrıldığında üretilecek. Bu nedenle, @Async yöntemlerinin kural olarak hiçbir zaman denetimli istisnalar atmaması gerektiği fikrini oluşturuyorum. Bunun yerine, tüm denetlenen özel durumları RuntimeException türünde sarmalı ve böylece throws yan tümcesi bulunmamalıdır.Spring @Async soyutlama, istisna işlemiyle ilgili sızıntı içeriyor

Bu doğru bir değerlendirme mi? Sızıntıyı düzelten herhangi bir takım veya programlama yaklaşımı var mı? Bahar geliştiricilerinin bunun hakkında ne düşündüğünü veya durumu iyileştirmek için herhangi bir plan varsa ne olur? Teşekkürler!

Muhtemelen related: Spring Async method hides exceptions

+1

konuşan, Bahar kontrolsüz istisnalar (Bahar Veri istisna çeviri bakmak) tercih eder ve bir gerçekten mümkün değil bir şey atmak için async yöntemi (bu yüzden 'Future' istisnaları sarar). – chrylis

+0

Gerçek sorun, @ Async'ed yönteminiz herhangi bir değer döndürmediğinde başlar. Bazı ilginç şeyler o zaman olur;) –

+0

Özellikle ilginç şeyler nelerdir, R4J? – Jukka

cevap

2

Kişisel değerlendirme muhtemelen doğrudur. Dediğin istisna işlemek istiyorsanız

Şimdi, sadece bu yapın:

Genellikle
@Async 
void mangle() { 
    try { 
     doMangle(); 
    } catch (YourCheckedException e) { 
     // Handle it 
    } 
} 

void doMangle() throws YourCheckedException { 
    ... 
} 
İlgili konular