java—在不影响主流程的情况下,围绕SpringAOP进行操作的最佳方法是什么?

q8l4jmvw  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(302)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

5个月前关门了。
改进这个问题
我是spring aop的新手,我被要求将日志保存到db中,根据在系统上采取的一些操作(对于许多控制器、服务和实体来说,这些操作相当大),我设法创建了一些建议,并获得了保存到日志中所需的数据,但我担心在我的事务处理过程中是否会发生意外的异常,所以我的问题是,在这种情况下,哪种最佳实践可以确保即使在日志保存出现意外异常的情况下,主流程仍能继续?您认为使用异步并管理保存在不同线程中的日志是一个好主意吗?
顺便说一下,可以使用@around在连接点流前后获取数据。
谢谢!

wgxvkvu9

wgxvkvu91#

您有两种选择:
或者结合使用 @Before 以及 @After 建议,如果你不需要携带状态从前者到后者。
或者使用 @Around 关于这一基本结构的建议:

@Around("<your pointcut>")
public Object myAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
  try {
    // 1. Do something before proceeding to the target method (optional)
    // 2. Proceed to target method (optional)
    Object result = joinPoint.proceed();
    // 3. Do something after obtaining original result (optional)
    // 4. Return original or modified result
    return result;
  }
  catch (...) {
    // Handle and/or log exception (optional), then either
    //   - re-throw original exception,
    //   - wrap it in another exception or
    //   - return a regular value
  }
  finally {
    // Do whatever needs to be done, no matter if an error occurs or not
  }
}

相关问题