我正在使用Spring 3.0.5,JPA,Hibernate 3.5.5-Final和Spring的JpaTransactionManager。有人知道一种简单的方法来以编程方式获取每个事务开始的时间戳吗?

最佳答案

理念

由于JpaTransactionManager扩展了AbstractPlatformTransactionManager
并且每个事务都以对#getTransaction方法的调用开始,您可以在该方法周围编写一个aspect

方面

@Aspect
public class AspectAroundTransactions() {
   @Pointcut("execution(* org.springframework.*.AbstractPlatformTransactionManager.getTransaction(..))" )
   public void newTransaction() {}

   @Before("newTransaction() && args(transactionDefinition,..)")
   public void beforeStartOfTransaction(TransactionDefinition transactionDefinition) {
      // here goes you code
      long start = System.nanoTime();
      System.out.println("Transaction " + transactionDefinition.getName() + " started at " + start );
   }
}

09-26 03:33