慢 SQL 日志与监听(since v3.7.0)
自 v3.7.0 起 Bean Searcher 提供了慢 SQL 日志与 监听功能。
慢 SQL 阈值
慢 SQL 阈值指的是慢 SQL 的最小执行耗时,它是判断一个 SQL 是否为慢 SQL 的标准,单位 ms,默认值为 500。当然也可以通过配置修改。
SpringBoot / Grails 配置项(使用 bean-searcher-boot-starter 依赖)
| 配置键名 | 含义 | 类型 | 默认值 |
|---|---|---|---|
bean-searcher.sql.slow-sql-threshold | 慢 SQL 阈值(单位:毫秒) | int | 500 |
Others
java
DefaultSqlExecutor sqlExecutor = new DefaultSqlExecutor(getDefaultDataSource());
// 配置慢 SQL 阈值
sqlExecutor.setSlowSqlThreshold(500);
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
// 省略其它属性配置,BeanSearcher 检索器也同此配置
.sqlExecutor(sqlExecutor)
.build();开启慢 SQL 日志
慢 SQL 的日志级别为 WARN,所以,只需将 cn.zhxu.bs.implement.DefaultSqlExecutor 的日志级别调整为 WARN | INFO | DEBUG 即可开启。
日志效果(执行耗时、SQL、执行参数、实体类):
log
14:55:02.151 WARN - bean-searcher [600ms] slow-sql: [select count(*) s_count from employee e where (e.type = ?)] params: [1] on [com.example.sbean.Employee]参考:起步 > 使用 > SQL 日志 章节。
监听慢 SQL 事件
有时候我们需要在代码中监听慢 SQL 事件,以便做进一步的自定义处理(比如:发送警告通知)。
SpringBoot / Grails(使用 bean-searcher-boot-starter 依赖)只需配置一个 Bean 即可
java
@Bean
public SqlExecutor.SlowListener slowSqlListener() {
return (
Class<?> beanClass, // 发生慢 SQL 的实体类
String slowSql, // 慢 SQL 字符串
List<Object> params, // SQL 执行参数
long timeCost // 执行耗时(单位:ms)
) -> {
// TODO: 监听处理
}
}Others
java
DefaultSqlExecutor sqlExecutor = new DefaultSqlExecutor(getDefaultDataSource());
// 配置慢 SQL 监听器
sqlExecutor.setSlowListener((
Class<?> beanClass, // 发生慢 SQL 的实体类
String slowSql, // 慢 SQL 字符串
List<Object> params, // SQL 执行参数
long timeCost // 执行耗时(单位:ms)
) -> {
// TODO: 监听处理
});
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
// 省略其它属性配置,BeanSearcher 检索器也同此配置
.sqlExecutor(sqlExecutor)
.build();