我如何得到通知,当一个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
}
};
}