Spring Transaction - 记录新事务的方法执行时间

时间:2017-07-19 10:04:52

标签: java spring transactions profiling aspectj

我有一个方面-j方面(在编译时编织)来记录方法名称和执行时间,当这最后一个大于1时。

日志聚合在ELK堆栈中,我们希望进行性能分析可视化,问题是堆栈中的所有子查询也被跟踪,我们有多个跟踪,每个工作单元有多个方法名称。

我只想跟踪每个工作单元的入口点方法,即。每个方法触发一个新事务(而不是加入现有事务的事务)。

有没有办法在不覆盖spring TransactionInterceptor的情况下这样做?

1 个答案:

答案 0 :(得分:1)

如果您只需要使用AspectJ的简单解决方案,以下内容可能对您有用。

我们假设你有一个名为切入点transactionalMethodExecution

pointcut transactionalMethodExecution(): execution(@org.springframework.transaction.annotation.Transactional * *(..));;

您可以使用cflowbelow排除最顶层控制流中的所有嵌套transactionalMethodExecution切入点:

transactionalMethodExecution() && !cflowbelow(transactionalMethodExecution())

来自cflowbelow的文档:

  

cflowbelow(Pointcut)

     

P选择的任何加入点Pointcut的控制流中挑选出每个加入点,而不是P本身。

这个解决方案无疑是简单化的,它不会处理嵌套事务或任何更奇特的事情。对于这些案例,您需要更全面的解决方案。