监听特定连接上的SELECT查询



我如何得到通知,当一个SELECT查询到一个特定的数据库是准备或执行在Spring启动与Hibernate?

我唯一真正需要的是SQL。

org.hibernate.engine.jdbc.internal.StatementPreparerImpl中,我看到对

的调用
jdbcCoordinator.getJdbcSessionOwner().getJdbcSessionContext().getObserver().jdbcPrepareStatementStart()

这看起来像一个事件,但我不知道如何为这个事件添加一个监听器,或者如果这个事件甚至包含SELECT查询的SQL。

我可以为org.hibernate.SQL记录器创建一个自定义appender,但这样我就没有关于正在使用的连接的任何信息。

我认为您需要的是spring-boot-data-source-decorator。它是一个Spring Boot启动器,允许您透明地记录所有数据库操作。您可能需要P6Spy集成。

@Bean
public JdbcEventListener myListener() {
return new JdbcEventListener() {
@Override
public void onBeforeExecuteQuery(StatementInformation statementInformation, String sql) {
// write you business logic here
}        
@Override
public void onAfterExecuteQuery(StatementInformation statementInformation, long timeElapsedNanos, String sql, SQLException e) {
// write you business logic here
}
};
}

最新更新