Tôi đang phát triển một ứng dụng Spring, và đã tự hỏi liệu có một phần của khung công tác để tôi làm điều gì đó như thế này một cách thanh lịch hơn, chẳng hạn như cấu hình một cái gì đó trong XML?Thread.setDefaultUncaughtExceptionHandler trong Spring
Trả lời
Nếu mục đích của câu hỏi của bạn là để thiết lập một tùy chỉnh UncaughtExceptionHandler
qua bối cảnh ứng dụng của bạn, bạn có thể sử dụng:
<bean id="myhandler" class="java.lang.ThreadGroup">
<constructor-arg value="Test"/>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.Thread"/>
<property name="targetMethod" value="setDefaultUncaughtExceptionHandler"/>
<property name="arguments">
<list>
<ref bean="myhandler" />
</list>
</property>
</bean>
(NB thay myhandler với một Thread.UncaughtExceptionHandler
của sự lựa chọn ...)
Đây là "cách thanh lịch hơn"? Làm thế nào là tốt hơn làm điều đó trong Java? – skaffman
Nếu không có bối cảnh tôi không thực sự có ý kiến về việc nó có thanh lịch hay không, nhưng tôi có thể thấy lý do làm việc này so với việc tạo một lớp Java riêng biệt để thiết lập trình xử lý ngoại lệ chưa được bắt đầu khi khởi động. – beny23
Tôi nghĩ rằng điều này là thanh lịch hơn, như thiết lập xử lý là một phần của cấu hình ứng dụng của bạn mà mùa xuân là vụ phải được kiểm soát ra. – mogronalol
Bạn cũng có thể sử dụng @ControllerAdvice
các lớp được chú thích để xử lý ngoại lệ không bắt buộc. Tham chiếu từ https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc, mã sau sẽ bắt bất kỳ Ngoại lệ nào:
@ControllerAdvice
public class MyUncaughtExceptionHandler {
@ExceptionHandler(value = Exception.class)
public void defaultExceptionHandler(Exception e) {
// do whatever you want with the exception
}
}
Trong ngữ cảnh nào? Bạn đang cố gắng giải quyết vấn đề gì? – skaffman
Xin lỗi tôi nên có công phu. Trong trường hợp này, tôi đang viết một trình xử lý ngoại lệ chưa được ghi, ghi lại dấu vết ngăn xếp vào tệp log4j của tôi. Trong khi đơn giản để thực hiện tôi đã tự hỏi nếu có một "con đường mùa xuân" làm việc. – mogronalol