Spring中@Named类的全局异常处理

时间:2014-05-28 05:29:09

标签: java spring hibernate exception-handling akka

我想在其中一个使用@Named注释的类中处理一组异常。

我正在使用AKKA actor进行并发。也使用Hibernate。

在我的Akka actor类中,我正在调用插入操作的hibernate方法。 我想知道如何在全局的所有actor类中处理异常。我可以使用@ExceptionHandler@ControllerAdvice来做到这一点。但我相信它只适用于@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());
 }  }

我想在我的演员之间处理ConstraintViolationException并回复一条消息(eg: sender().tell("CONSTRAINT_VIOLATION", self());)。 我可以在catch块中处理它,但我需要在所有actor类中复制它。

有没有办法像@ControllerAdvice一样处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

您可以使用default exception handler

  

通过设置默认的未捕获异常处理程序,应用程序可以更改已经接受系统提供的任何“默认”行为的线程处理未捕获异常的方式(例如,记录到特定设备或文件)

但是它在CDI-Beans和非CDI-Beans之间没有区别(顺便说一下:我用它来自动提高Stacktraces中所有类的日志记录级别)