<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用druid自定義攔截器

               使用druid自定義的攔截器StatFilter,是可以通過日志進行慢sql打印的。但是如果想要把慢sql放入DB,或者通過釘釘告警的方式進行實時打印,則需要實現自定義的攔截器。

               第一步:重新自定義攔截器

            

      package com.example.demo.filter;
      
      @Component
      public class SlowSqlTestFilter extends FilterEventAdapter implements StatFilterMBean {
      
          private static final String IGNORE_SQL = "SELECT 1";
      
          private static final String INSERT= "insert";
          private Logger logger = LoggerFactory.getLogger(this.getClass());
      
          @Resource
          private BbsDruidSqlDao bbsDruidSqlDao;
          @Resource
          private SlowSqlConfig slowSqlConfig;
      
          @Override
          protected void statementExecuteBefore(StatementProxy statement, String sql) {
              super.statementExecuteBefore(statement, sql);
              //sql開始執行的時間
              statement.setLastExecuteStartNano();
          }
      
          @Override
          protected void statementExecuteBatchBefore(StatementProxy statement) {
              super.statementExecuteBatchBefore(statement);
              //sql開始執行的時間
              statement.setLastExecuteTimeNano();
          }
      
          @Override
          protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
              if (IGNORE_SQL.equals(sql) || sql.contains(INSERT)) {
                  return;
              }
              if (slowSqlConfig == null) {
                  slowSqlConfig = SpringUtil.getBean(SlowSqlConfig.class);
              }
              final long nonNano = System.nanoTime();
              final long lastTime = nonNano - statement.getLastExecuteStartNano();
              long millis = lastTime / (1000 * 1000);
              if (millis >= slowSqlConfig.getSlowSqlMillis()) {
                  slowSqlToMysql(statement, sql,millis);
              }
      
          }
      
      
          @Override
          protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) {
              super.statementExecuteUpdateBefore(statement, sql);
              statement.setLastExecuteTimeNano();
          }
      
          @Override
          protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) {
              final long nonNano = System.nanoTime();
              final long lastTime = nonNano - statement.getLastExecuteStartNano();
              long millis = lastTime / (1000 * 1000);
              if (millis >= slowSqlConfig.getSlowSqlMillis()) {
                  slowSqlToMysql(statement, sql,millis);
              }
          }
      
          @Override
          protected void statementExecuteQueryBefore(StatementProxy statement, String sql) {
              super.statementExecuteQueryBefore(statement, sql);
              statement.setLastExecuteStartNano();
          }
      
          @Override
          protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) {
              if (IGNORE_SQL.equals(sql)) {
                  return;
              }
              final long nonNano = System.nanoTime();
              final long lastTime = nonNano - statement.getLastExecuteStartNano();
              long millis = lastTime / (1000 * 1000);
              if (millis >= slowSqlConfig.getSlowSqlMillis()) {
                  slowSqlToMysql(statement, sql,millis);
              }
          }
      
      
          @Override
          protected void statement_executeErrorAfter(StatementProxy statement, String sql, Throwable error) {
              super.statement_executeErrorAfter(statement, sql, error);
          }
      
          private void slowSqlToMysql(StatementProxy statement, String sql,Long millis) {
              if (bbsDruidSqlDao == null) {
                  bbsDruidSqlDao = SpringUtil.getBean(BbsDruidSqlDao.class);
              }
              String slowParamters = buildSlowParameters(statement);
              logger.info("慢sql語句{},入參:{}", sql, slowParamters);
              BbsDruidSql bbsDruidSql = BbsDruidSql.builder().slowSql(sql).slowSqlParam(slowParamters)
                      .createTime(new Date()).updateTime(new Date()).slowSqlTraceid(millis.toString()).build();
              bbsDruidSqlDao.insertSelective(bbsDruidSql);
          }
      
          protected String buildSlowParameters(StatementProxy statement) {
              JSONWriter out = new JSONWriter();
      
              out.writeArrayStart();
              for (int i = 0, parametersSize = statement.getParametersSize(); i < parametersSize; ++i) {
                  JdbcParameter parameter = statement.getParameter(i);
                  if (i != 0) {
                      out.writeComma();
                  }
                  if (parameter == null) {
                      continue;
                  }
      
                  Object value = parameter.getValue();
                  if (value == null) {
                      out.writeNull();
                  } else if (value instanceof String) {
                      String text = (String) value;
                      if (text.length() > 100) {
                          out.writeString(text.substring(0, 97) + "...");
                      } else {
                          out.writeString(text);
                      }
                  } else if (value instanceof Number) {
                      out.writeObject(value);
                  } else if (value instanceof java.util.Date) {
                      out.writeObject(value);
                  } else if (value instanceof Boolean) {
                      out.writeObject(value);
                  } else if (value instanceof InputStream) {
                      out.writeString("<InputStream>");
                  } else if (value instanceof NClob) {
                      out.writeString("<NClob>");
                  } else if (value instanceof Clob) {
                      out.writeString("<Clob>");
                  } else if (value instanceof Blob) {
                      out.writeString("<Blob>");
                  } else {
                      out.writeString('<' + value.getClass().getName() + '>');
                  }
              }
              out.writeArrayEnd();
      
              return out.toString();
          }
      
          @Override
          public boolean isMergeSql() {
              return false;
          }
      
          @Override
          public void setMergeSql(boolean mergeSql) {
      
          }
      
          @Override
          public boolean isLogSlowSql() {
              return false;
          }
      
          @Override
          public void setLogSlowSql(boolean logSlowSql) {
      
          }
      
          @Override
          public String mergeSql(String sql, String dbType) {
              return null;
          }
      
          @Override
          public long getSlowSqlMillis() {
              return 0;
          }
      
          @Override
          public void setSlowSqlMillis(long slowSqlMillis) {
      
          }
      }

      第二步:把自定義的攔截器放入druid的datasource中

      @ConfigurationProperties(prefix = "spring.datasource")
      @Bean(initMethod = "init",destroyMethod = "close")
      public DruidDataSource dataSource(){
          DruidDataSource dataSource = new DruidDataSource();
          //使用自定義攔截器 注意 不能new
          dataSource.setProxyFilters(Collections.singletonList(new SlowSqlTestFilter()));
          //dataSource.setProxyFilters(Collections.singletonList(statGwmFilter()));
          //設置druid的重置間隔
          dataSource.setTimeBetweenLogStatsMillis(60000);
          return dataSource;
      }

       

       

      posted @ 2023-11-24 16:35  Doyourself!  閱讀(477)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩av片无码一区二区不卡| 日韩深夜免费在线观看| 太原市| 天堂在线最新版av观看| 国产一区日韩二区欧美三区| 亚洲中文字幕国产精品| 无码人妻精品一区二区三区66| 国产精品成人午夜福利| 国产深夜福利在线免费观看| 亚洲av日韩在线资源| 国内精品久久久久电影院| 毛片无遮挡高清免费| 377P欧洲日本亚洲大胆| 国产午夜亚洲精品不卡网站| 国产精品国产亚洲区久久| 妺妺窝人体色www看美女| 国产日韩综合av在线| 少妇久久久久久久久久| 免费看的日韩精品黄色片| 深夜在线观看免费av| 中文字幕亚洲精品人妻| yw尤物av无码国产在线观看| 免费人成视频在线视频电影| 亚洲色婷婷一区二区三区| 国产av剧情md精品麻豆| 久久日韩精品一区二区五区| 国产精品欧美福利久久| 在线播放亚洲成人av| 精品日韩色国产在线观看| 国产亚洲人成网站在线观看 | a∨变态另类天堂无码专区| 国产色无码专区在线观看| 国产一区二区三区精品综合| 亚洲精品国产综合久久一线| 一区二区三区鲁丝不卡| 末成年娇小性色xxxxx| 农村妇女野外一区二区视频| 肉大捧一进一出免费视频| 亚洲A综合一区二区三区| 精品尤物国产尤物在线看 | 久久无码人妻精品一区二区三区 |