• druid 配置释疑


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


    版权声明
    本文原创发表于 博客园,作者为 阿K .     本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    欢迎关注本人微信公众号:觉醒的码农,或者扫码进群:

  • 相关阅读:
    CSS——精灵图与背景图片定位
    CSS——text-indent
    CSS——样式隐藏
    CSS——规避脱标流和vertical-align
    CSS——盒子居中显示
    CSS——img
    CSS——position
    CSS——样式初始化
    CSS——清除浮动
    CSS——float
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/15207863.html
Copyright © 2020-2023  润新知