【发布时间】:2011-01-13 06:19:58
【问题描述】:
我正在使用 Spring 3.0.5、JPA、Hibernate 3.5.5-Final 和 Spring 的 JpaTransactionManager。有人知道以编程方式获取每个事务开始的时间戳的简单方法吗?
【问题讨论】:
标签: java hibernate spring jpa transactions
我正在使用 Spring 3.0.5、JPA、Hibernate 3.5.5-Final 和 Spring 的 JpaTransactionManager。有人知道以编程方式获取每个事务开始的时间戳的简单方法吗?
【问题讨论】:
标签: java hibernate spring jpa transactions
因为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 );
}
}
【讨论】:
可以在 WEB-INF 中使用过滤器来执行此操作 - 它会将时间戳作为命名属性注入到请求上下文中。时间戳不会是“事务”时间戳,而是请求时间戳。但我怀疑它会做你想做的事。
【讨论】: