簡體   English   中英

春季在@Named類中進行全局異常處理

[英]Global exception handling in @Named class in spring

我想在使用@Named注解的一個類中處理一組異常。

我正在使用AKKA actor進行並發。 還使用休眠。

在我的Akka actor類中,我正在調用用於插入操作的休眠方法。 我想知道如何全局處理所有actor類中的異常。 我可以使用@ExceptionHandler@ControllerAdvice做到這@ExceptionHandler 但我相信它僅在@Controller層中有效。

示例代碼如下:

@Named("SaveDepartmentService") 
public class SaveDepartmentService extends BaseCommonService {

 @Autowired
 IDepartmentRepository departmentRepository;

 @Override
 public PartialFunction<Object, BoxedUnit> receive(){
    return ReceiveBuilder
            .match(Department.class, c->createOrUpdateDepartment(c))
            .build()
            .orElse(matchAny());
 }

 private void createOrUpdateDepartment(Department dept){
   // try{
         departmentRepository.insertOrUpdate(dept);
   // }catch (ConstraintViolationException e){
    //    System.out.println("-------------------------------");
     //   e.printStackTrace();
     //   wrap the exception and send as 
     //   sender().tell("Constarint_violation",self());
    //}
    sender().tell(dept, self());
 }  }

我想在我的所有actor上處理ConstraintViolationException並用一條消息響應( eg: sender().tell("CONSTRAINT_VIOLATION", self()); )。 我可以通過在catch塊中處理它來做同樣的事情,但是我需要在所有actor類中復制它。

有沒有辦法像@ControllerAdvice一樣處理它?

您可以使用默認的異常處理程序

通過設置默認的未捕獲異常處理程序,應用程序可以更改那些已經接受系統提供的“默認”行為的線程的未捕獲異常處理方式(例如,記錄到特定設備或文件)。

但這在CDI-Beans和Non-CDI-Beans之間沒有區別(順便說一句:我使用它來自動增加Stacktraces中所有類的日志記錄級別)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM