druid 功能强大, 同时有很强多的配置 , 有点让人迷乱。
mergeSql
druid发布0.2.1版,增加sql统计的merge功能。
1.增加sql统计的merge功能。
当配置druid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilter属性时,可以自动把:
SELECT * FROM t FROM id = 1;
SELECT * FROM t FROM id = 2;
参数化为 select * from t where id = ?然后作为一条语句来统计。
2.修复单引号转义语法解析错误
3.修复mysql的update语句不解析limit从句错误。
mergeSql 是不是默认true ?
是 false, 一般我们还是希望 设置 true ,所以这里不能使用默认值。
++++++++++++++
connectionProperties
connectionProperties 其实是一个简化的配置,使用它之后, 就可以快速的配置诸如慢sql 之类的, 不需要引入 druid-spring 那一套。 直接在 jdbc url 后面添加即可, 或者如下,简单的 一行 搞定:
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=5000;druid.log.stmt.executableSql=true;druid.log.stmt=true;druid.log.rs=true;druid.log.stmt.executableSql=true
缺省输入的日志信息全面,但是内容比较多,有时候我们需要定制化配置日志输出。
statementExecutableSqlLogEnable 默认 false
-Ddruid.log.stmt.executableSql=true
默认值是
private boolean connectionStackTraceEnable = false; // 3 seconds is slow sql protected long slowSqlMillis = 3 * 1000; protected boolean logSlowSql = false; private String dbType; private boolean mergeSql = false;
++++++++++++++
合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
什么是 多个数据源 合并?
SQL 监控
SQL 监控 是实际执行的sql , 包括执行时间、 次数等等。 如果sql 被 防火墙拦截了, 那么这里不会展示。
防火墙:
# 默认stat 是起作用的, 而wall,slf4j 默认是不起作用的; 如果filters不配置stat, 这里的stat.enabled=false 会把其关闭,然后
# 设置 .druid.filter.stat.enabled=false 之后 * filter类名 为空! 依赖于他的 SQL 监控 不再起作用! 但 wall,slf4j、spring aop 可以。
# 但是, 如果filters配置了stat, 这里的stat.enabled=false 也会把其关闭
# 因为 @Bean
# @ConfigurationProperties("spring.datasource.druid.filter.stat")
# @ConditionalOnProperty(
# prefix = "spring.datasource.druid.filter.stat",
# name = {"enabled"},
# matchIfMissing = true
# )
# @ConditionalOnMissingBean
# public StatFilter statFilter() {
# return new StatFilter();
# }
session 监控
有时候你会发现session 没有起作用。 为何? 配置不对吧, 需要如下配置:
spring.datasource.druid.use-local-session-state=true
spring.datasource.druid.web-stat-filter.session-stat-enable=true
然后就可以看到了:
--
几个eviction 配置
spring.datasource.druid.min-evictable-idle-time-millis=32
spring.datasource.druid.max-evictable-idle-time-millis=32
spring.datasource.druid.time-between-eviction-runs-millis=323
min-evictable-idle-time-millis 是空闲连接清理时间,相当于是 一个连接的最小存活时间, 即使他是空闲的。
max-evictable-idle-time-millis 是 另外一种情况。
time-between-eviction-runs-millis 是 空闲连接清理线程的 运行时间间隔
+++
druid.web-stat-filter.url-pattern 是对webmvc 的请求的拦截
druid.stat-view-servlet.url-pattern 是druid web UI 的访问地址,默认就是druid
# 不是必须先要 web-stat-filter.enabled=true, 其他的 才会起作用,如web-stat-filter.url-pattern=/webmvc。,因为他默认是true #spring.datasource.druid.web-stat-filter.enabled=true # 这个是控制 监控的 浏览器访问的 web 请求的数据。 可以使用/druida 的形式, 但最好还是 使用通配符*; /webmvc/* 包括了 /webmvc, 以及其下面的所有uri # 默认 urlPattern 是空, 意味着 所有? #spring.datasource.druid.web-stat-filter.url-pattern=/webmvc spring.datasource.druid.web-stat-filter.url-pattern=/webmvc/* # 必须先要 enabled? 不必须, havingValue 就是 true, 只要存在任何 stat-view-servlet.xx, 就是true #spring.datasource.druid.stat-view-servlet.enabled=true # no, 那个是因为, 默认是 public static class StatViewServlet { # private boolean enabled = true; # public static class WebStatFilter { # private boolean enabled = true; #spring.datasource.druid.stat-view-servlet.enabled=false spring.datasource.druid.stat-view-servlet.url-pattern=/druidaa/*
url 监控
对于 url 监控, 其实是监控了 所有的 spring mvc 的controller ! 是http请求的监控。
spring监控
再看看 spring监控 : 他是 方法的监控, 包括方法执行的时间, 次数 等等。
需要先配置 spring代理
注意, 这里的 spring代理,其实是监控了 所有的对外的网络调用。! why。 而是只对 setPatterns 部分生效
@Bean
public DruidStatInterceptor druidStatInterceptor() {
DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
return dsInterceptor;
}
@Bean
@Scope("prototype")
public JdkRegexpMethodPointcut druidStatPointcut() {
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
pointcut.setPatterns("com.kl.controller.*","com.kl.service.*");
return pointcut;
}
@Bean
public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
defaultPointAdvisor.setPointcut(druidStatPointcut);
defaultPointAdvisor.setAdvice(druidStatInterceptor);
return defaultPointAdvisor;
}
然后
web 应用呢?
他是整体 http 请求、响应的统计信息,jdbc 信息
Json API 是 提供了json格式的统计信息的 下载链接: