2016-12-08 23 views
5

ben uygulama (1.4.2 sürümü) benim Bahar Boot zamanlanmış görevler çok var ve mümkün gibi bir işleyicisi kullanarak onlardan tüm özel durumları yakalamak istiyoruz @ExceptionHandler ek açıklama ile normal kontrolörler için.Evrensel istisna işleyicisi

@Component 
public class UpdateJob { 
    @Transactional 
    @Scheduled(cron = "0 1 0 * * *") 
    public void runUpdateUsers() { 
     userService.updateUsers(); 
    } 

    @ExceptionHandler 
    public void handle(Exception e) { 
     // some more logic here 
     logger.error(e.getMessage()); 
    } 

} 

@ExceptionHandler @Scheduled yöntemi için çalışmaz (ve bunun için değildir çıkıyor): Bu yaklaşım için diş çekme @Scheduled açıklama ile tanımlanır görevler için çalışmaz. Bunun yerine, Bahar Boot o LoggingErrorHandler kendi oluyor kullanır:

2016-12-08 15:49:20.016 ERROR 23119 --- [pool-7-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task. 

ben bir şekilde değiştirmek veya zamanlanmış görevler için tedarik varsayılan durum işleyicisi miyim? Ya da anlayabildiğim gibi, daha fazla hata ileten PropagatingErrorHandler'a geçmek (ve mümkün mü)? Sadece Java yapılandırması (XML yok) kullanarak hedefe ulaşmak için başka bir yolu var mı? açıkça için Java yapılandırmasına dayalı bir çözüm sorar olarak

Bu this question kopyası olmaması değil, XML (yani herhangi bir XML yapılandırma olmadan Bahar Boot projeye dahil etmek iyi değildir).

da sıfırdan TaskScheduler nasıl yapılandırılacağı gösteren bazı cevaplar vardır. Örneğin, bu answer, havuz boyutunu, maksimum havuz boyutunu, sıra kapasitesini de tanımlamanızı gerektirir. Here, aynı zamanda çok kapsamlı konfigürasyona ihtiyaç duyan bir çözümdür. Documentation, diğer yönlerin nasıl yapılandırılacağını, ancak hata işleme yönteminin nasıl belirleneceğini gösterir. Ama Ben maksimum Bahar Önyükleme varsayılan değerleri (iş parçacığı havuzu, infaz yapılandırmaları vs.) tutabilir, böylece Java yapılandırma ile minimum gerekli çaba ne.

yorum belirtildiği gibi
+0

İstisna işleyiciler Web işleyici yöntemleri içindir. –

+0

Lütfen mantık sağlayın, herhangi bir yöntem veya sınıf için istisna eylemcisini kullanamazsanız herhangi bir sebep var mı? Terim "web işleyicisi" ASP.net için geçerlidir, belki de orada farklı? –

+0

Webmvc altyapısının bir parçasıdır. @ Controller ile kullanılmalıdır. Bağladığınız javadoc'u okuyun. –

cevap

4

, @ExceptionHandler Bahar MVC denetleyicileri içindir. durumda

Eğer tek programlayıcınız için istisna işleme mantığı istiyorum, en kolay ve en sürdürülebilir try-catch bloğu içine sarın ve orada hatayı işlemek olacaktır. Çeşitli schedulers için aynı hata işleyicisi uygulamak isterseniz

, .m izleyin. Deinum'un önerisi.

+0

Teşekkürler! Bu özel @ExceptionHandler aslında bu amaç için tasarlanmamış görünüyor. Yalnızca hata işleyicisini sağlamak istiyorum, ancak diğer yürütücü özelliklerini değiştirmem. Zamanlayıcının kendisini yönetmeye istekli olmadıkça, zamanlanan görevlere (@Bean olarak) istisna işleminin sağlanmasının bir yolu olmadığını anlıyorum. –