10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 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格式的统计信息的 下载链接:

 

 

 

 

 

posted on 2021-09-03 12:59  CanntBelieve  阅读(1907)  评论(0编辑  收藏  举报