您可以考慮實施一個實現ApplicationListener<E extends ApplicationEvent>
類和執行在那裏測量。事情是這樣的:
@Component
public class TransactionListener implements ApplicationListener<Neo4jDataManipulationEvent> {
private Long transactionStart;
private static final Logger log = LoggerFactory.getLogger(TransactionListener.class);
@Override
public void onApplicationEvent(Neo4jDataManipulationEvent event) {
if (event instanceof BeforeSaveEvent) {
transactionStart = System.currentTimeMillis();
}
if (event instanceof AfterSaveEvent) {
log.debug("Transaction time in ms: ", System.currentTimeMillis() - transactionStart);
log.debug("Source: ", event.getSource());
}
}
對於JPA可以考慮實施類似的解決方案(根據this tutorial):
public class LogListener {
private Long transactionStart;
@PrePersist
@PreUpdate
@PreRemove
private void before(Object object) {
transactionStart = System.currentTimeMillis();
}
@PostPersist
@PostUpdate
@PostRemove
private void after(Object object) {
System.out.println("Transaction time in ms: ", System.currentTimeMillis() - transactionStart);
System.out.println("Source: ", object.getClass());
}
}
您需要標註哪些實例被保存到數據庫與@EntityListeners(LogListener.class)
實體類之後。
已投票但我實際上是指一般交易記錄,以跟蹤緩慢的交易,而不是明確跟蹤每筆交易。編輯的問題。 –
@PiotrMüller使用方面。 –