繁体   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