소스 검색

移除 PerformanceInterceptor 相关,建议使用p6spy

miemie 6 년 전
부모
커밋
0e48f73d3e

+ 0 - 376
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlFormatter.java

@@ -1,376 +0,0 @@
-/*
- * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * https://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
- * See the lgpl.txt file in the root directory or <https://www.gnu.org/licenses/lgpl-2.1.html>.
- */
-package com.baomidou.mybatisplus.core.toolkit.sql;
-
-import java.util.*;
-
-/**
- * Performs formatting of basic SQL statements (DML + query).
- * <p>Copy Hibernate BasicFormatterImpl</p>
- * <p>last commit on 2018-03-15</p>
- *
- * @author Gavin King
- * @author Steve Ebersole
- */
-@Deprecated
-public class SqlFormatter {
-
-    private static final String WHITESPACE = " \n\r\f\t";
-    private static final Set<String> BEGIN_CLAUSES = new HashSet<>();
-    private static final Set<String> END_CLAUSES = new HashSet<>();
-    private static final Set<String> LOGICAL = new HashSet<>();
-    private static final Set<String> QUANTIFIERS = new HashSet<>();
-    private static final Set<String> DML = new HashSet<>();
-    private static final Set<String> MISC = new HashSet<>();
-    private static final String INDENT_STRING = "    ";
-    private static final String INITIAL = System.lineSeparator() + INDENT_STRING;
-
-    static {
-        BEGIN_CLAUSES.add("left");
-        BEGIN_CLAUSES.add("right");
-        BEGIN_CLAUSES.add("inner");
-        BEGIN_CLAUSES.add("outer");
-        BEGIN_CLAUSES.add("group");
-        BEGIN_CLAUSES.add("order");
-
-        END_CLAUSES.add("where");
-        END_CLAUSES.add("set");
-        END_CLAUSES.add("having");
-        END_CLAUSES.add("from");
-        END_CLAUSES.add("by");
-        END_CLAUSES.add("join");
-        END_CLAUSES.add("into");
-        END_CLAUSES.add("union");
-
-        LOGICAL.add("and");
-        LOGICAL.add("or");
-        LOGICAL.add("when");
-        LOGICAL.add("else");
-        LOGICAL.add("end");
-
-        QUANTIFIERS.add("in");
-        QUANTIFIERS.add("all");
-        QUANTIFIERS.add("exists");
-        QUANTIFIERS.add("some");
-        QUANTIFIERS.add("any");
-
-        DML.add("insert");
-        DML.add("update");
-        DML.add("delete");
-
-        MISC.add("select");
-        MISC.add("on");
-    }
-
-    public String format(String source) {
-        return new FormatProcess(source).perform();
-    }
-
-    private static class FormatProcess {
-        boolean beginLine = true;
-        boolean afterBeginBeforeEnd;
-        boolean afterByOrSetOrFromOrSelect;
-        boolean afterValues;
-        boolean afterOn;
-        boolean afterBetween;
-        boolean afterInsert;
-        int inFunction;
-        int parensSinceSelect;
-        StringBuilder result = new StringBuilder();
-        StringTokenizer tokens;
-
-        int indent = 1;
-        private LinkedList<Integer> parenCounts = new LinkedList<>();
-        private LinkedList<Boolean> afterByOrFromOrSelects = new LinkedList<>();
-        String lastToken;
-        String token;
-        String lcToken;
-
-        FormatProcess(String sql) {
-            tokens = new StringTokenizer(
-                sql,
-                "()+*/-=<>'`\"[]," + WHITESPACE,
-                true
-            );
-        }
-
-        private static boolean isFunctionName(String tok) {
-            if (tok == null || tok.length() == 0) {
-                return false;
-            }
-
-            final char begin = tok.charAt(0);
-            final boolean isIdentifier = Character.isJavaIdentifierStart(begin) || '"' == begin;
-            return isIdentifier &&
-                !LOGICAL.contains(tok) &&
-                !END_CLAUSES.contains(tok) &&
-                !QUANTIFIERS.contains(tok) &&
-                !DML.contains(tok) &&
-                !MISC.contains(tok);
-        }
-
-        private void commaAfterOn() {
-            out();
-            indent--;
-            newline();
-            afterOn = false;
-            afterByOrSetOrFromOrSelect = true;
-        }
-
-        private void commaAfterByOrFromOrSelect() {
-            out();
-            newline();
-        }
-
-        private void logical() {
-            if ("end".equals(lcToken)) {
-                indent--;
-            }
-            newline();
-            out();
-            beginLine = false;
-        }
-
-        private void on() {
-            indent++;
-            afterOn = true;
-            newline();
-            out();
-            beginLine = false;
-        }
-
-        private void misc() {
-            out();
-            if ("between".equals(lcToken)) {
-                afterBetween = true;
-            }
-            if (afterInsert) {
-                newline();
-                afterInsert = false;
-            } else {
-                beginLine = false;
-                if ("case".equals(lcToken)) {
-                    indent++;
-                }
-            }
-        }
-
-        String perform() {
-
-            result.append(INITIAL);
-
-            while (tokens.hasMoreTokens()) {
-                token = tokens.nextToken();
-                lcToken = token.toLowerCase(Locale.ROOT);
-
-                if ("'".equals(token)) {
-                    String t;
-                    do {
-                        t = tokens.nextToken();
-                        token += t;
-                    }
-                    // cannot handle single quotes
-                    while (!"'".equals(t) && tokens.hasMoreTokens());
-                } else if ("\"".equals(token)) {
-                    String t;
-                    do {
-                        t = tokens.nextToken();
-                        token += t;
-                    }
-                    while (!"\"".equals(t) && tokens.hasMoreTokens());
-                }
-                // SQL Server uses "[" and "]" to escape reserved words
-                // see SQLServerDialect.openQuote and SQLServerDialect.closeQuote
-                else if ("[".equals(token)) {
-                    String t;
-                    do {
-                        t = tokens.nextToken();
-                        token += t;
-                    }
-                    while (!"]".equals(t) && tokens.hasMoreTokens());
-                }
-
-                if (afterByOrSetOrFromOrSelect && ",".equals(token)) {
-                    commaAfterByOrFromOrSelect();
-                } else if (afterOn && ",".equals(token)) {
-                    commaAfterOn();
-                } else if ("(".equals(token)) {
-                    openParen();
-                } else if (")".equals(token)) {
-                    closeParen();
-                } else if (BEGIN_CLAUSES.contains(lcToken)) {
-                    beginNewClause();
-                } else if (END_CLAUSES.contains(lcToken)) {
-                    endNewClause();
-                } else if ("select".equals(lcToken)) {
-                    select();
-                } else if (DML.contains(lcToken)) {
-                    updateOrInsertOrDelete();
-                } else if ("values".equals(lcToken)) {
-                    values();
-                } else if ("on".equals(lcToken)) {
-                    on();
-                } else if (afterBetween && lcToken.equals("and")) {
-                    misc();
-                    afterBetween = false;
-                } else if (LOGICAL.contains(lcToken)) {
-                    logical();
-                } else if (isWhitespace(token)) {
-                    white();
-                } else {
-                    misc();
-                }
-
-                if (!isWhitespace(token)) {
-                    lastToken = lcToken;
-                }
-
-            }
-            return result.toString();
-        }
-
-        private void updateOrInsertOrDelete() {
-            out();
-            indent++;
-            beginLine = false;
-            if ("update".equals(lcToken)) {
-                newline();
-            }
-            if ("insert".equals(lcToken)) {
-                afterInsert = true;
-            }
-        }
-
-        private void select() {
-            out();
-            indent++;
-            newline();
-            parenCounts.addLast(parensSinceSelect);
-            afterByOrFromOrSelects.addLast(afterByOrSetOrFromOrSelect);
-            parensSinceSelect = 0;
-            afterByOrSetOrFromOrSelect = true;
-        }
-
-        private void out() {
-            result.append(token);
-        }
-
-        private void endNewClause() {
-            if (!afterBeginBeforeEnd) {
-                indent--;
-                if (afterOn) {
-                    indent--;
-                    afterOn = false;
-                }
-                newline();
-            }
-            out();
-            if (!"union".equals(lcToken)) {
-                indent++;
-            }
-            newline();
-            afterBeginBeforeEnd = false;
-            afterByOrSetOrFromOrSelect = "by".equals(lcToken)
-                || "set".equals(lcToken)
-                || "from".equals(lcToken);
-        }
-
-        private void beginNewClause() {
-            if (!afterBeginBeforeEnd) {
-                if (afterOn) {
-                    indent--;
-                    afterOn = false;
-                }
-                indent--;
-                newline();
-            }
-            out();
-            beginLine = false;
-            afterBeginBeforeEnd = true;
-        }
-
-        private void values() {
-            indent--;
-            newline();
-            out();
-            indent++;
-            newline();
-            afterValues = true;
-        }
-
-        private void closeParen() {
-            parensSinceSelect--;
-            if (parensSinceSelect < 0) {
-                indent--;
-                parensSinceSelect = parenCounts.removeLast();
-                afterByOrSetOrFromOrSelect = afterByOrFromOrSelects.removeLast();
-            }
-            if (inFunction > 0) {
-                inFunction--;
-                out();
-            } else {
-                if (!afterByOrSetOrFromOrSelect) {
-                    indent--;
-                    newline();
-                }
-                out();
-            }
-            beginLine = false;
-        }
-
-        private void openParen() {
-            if (isFunctionName(lastToken) || inFunction > 0) {
-                inFunction++;
-            }
-            beginLine = false;
-            if (inFunction > 0) {
-                out();
-            } else {
-                out();
-                if (!afterByOrSetOrFromOrSelect) {
-                    indent++;
-                    newline();
-                    beginLine = true;
-                }
-            }
-            parensSinceSelect++;
-        }
-
-        private void white() {
-            if (!beginLine) {
-                result.append(" ");
-            }
-        }
-
-        private static boolean isWhitespace(String token) {
-            return WHITESPACE.contains(token);
-        }
-
-        private void newline() {
-            result.append(System.lineSeparator());
-            for (int i = 0; i < indent; i++) {
-                result.append(INDENT_STRING);
-            }
-            beginLine = true;
-        }
-    }
-}

+ 0 - 16
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java

@@ -26,22 +26,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool;
  */
  */
 public class SqlUtils {
 public class SqlUtils {
 
 
-    private final static SqlFormatter SQL_FORMATTER = new SqlFormatter();
-
-    /**
-     * 格式sql
-     */
-    @Deprecated
-    public static String sqlFormat(String boundSql, boolean format) {
-        if (format) {
-            try {
-                return SQL_FORMATTER.format(boundSql);
-            } catch (Exception ignored) {
-            }
-        }
-        return boundSql;
-    }
-
     /**
     /**
      * 用%连接like
      * 用%连接like
      *
      *

+ 0 - 258
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PerformanceInterceptor.java

@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * https://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.baomidou.mybatisplus.extension.plugins;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.ibatis.executor.statement.StatementHandler;
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.plugin.Interceptor;
-import org.apache.ibatis.plugin.Intercepts;
-import org.apache.ibatis.plugin.Invocation;
-import org.apache.ibatis.plugin.Plugin;
-import org.apache.ibatis.plugin.Signature;
-import org.apache.ibatis.reflection.MetaObject;
-import org.apache.ibatis.reflection.SystemMetaObject;
-import org.apache.ibatis.session.ResultHandler;
-
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.SystemClock;
-import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-/**
- * 性能分析拦截器,用于输出每条 SQL 语句及其执行时间
- *
- * @author hubin nieqiurong TaoYu
- * @since 2016-07-07
- */
-@Intercepts({
-    @Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),
-    @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),
-    @Signature(type = StatementHandler.class, method = "batch", args = {Statement.class})
-})
-public class PerformanceInterceptor implements Interceptor {
-
-    private static final Log logger = LogFactory.getLog(PerformanceInterceptor.class);
-    private static final String DruidPooledPreparedStatement = "com.alibaba.druid.pool.DruidPooledPreparedStatement";
-    private static final String T4CPreparedStatement = "oracle.jdbc.driver.T4CPreparedStatement";
-    private static final String OraclePreparedStatementWrapper = "oracle.jdbc.driver.OraclePreparedStatementWrapper";
-    /**
-     * SQL 执行最大时长,超过自动停止运行,有助于发现问题。
-     */
-    @Setter
-    @Getter
-    @Accessors(chain = true)
-    private long maxTime = 0;
-    /**
-     * SQL 是否格式化
-     */
-    @Setter
-    @Getter
-    @Accessors(chain = true)
-    private boolean format = false;
-    /**
-     * 是否写入日志文件
-     * <p>true 写入日志文件,不阻断程序执行!</p>
-     * <p>超过设定的最大执行时长异常提示!</p>
-     */
-    @Setter
-    @Getter
-    @Accessors(chain = true)
-    private boolean writeInLog = false;
-    private Method oracleGetOriginalSqlMethod;
-    private Method druidGetSQLMethod;
-
-    @Override
-    public Object intercept(Invocation invocation) throws Throwable {
-        Statement statement;
-        Object firstArg = invocation.getArgs()[0];
-        if (Proxy.isProxyClass(firstArg.getClass())) {
-            statement = (Statement) SystemMetaObject.forObject(firstArg).getValue("h.statement");
-        } else {
-            statement = (Statement) firstArg;
-        }
-        MetaObject stmtMetaObj = SystemMetaObject.forObject(statement);
-        try {
-            statement = (Statement) stmtMetaObj.getValue("stmt.statement");
-        } catch (Exception e) {
-            // do nothing
-        }
-        if (stmtMetaObj.hasGetter("delegate")) {
-            //Hikari
-            try {
-                statement = (Statement) stmtMetaObj.getValue("delegate");
-            } catch (Exception ignored) {
-
-            }
-        }
-
-        String originalSql = null;
-        String stmtClassName = statement.getClass().getName();
-        if (DruidPooledPreparedStatement.equals(stmtClassName)) {
-            try {
-                if (druidGetSQLMethod == null) {
-                    Class<?> clazz = Class.forName(DruidPooledPreparedStatement);
-                    druidGetSQLMethod = clazz.getMethod("getSql");
-                }
-                Object stmtSql = druidGetSQLMethod.invoke(statement);
-                if (stmtSql instanceof String) {
-                    originalSql = (String) stmtSql;
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        } else if (T4CPreparedStatement.equals(stmtClassName)
-            || OraclePreparedStatementWrapper.equals(stmtClassName)) {
-            try {
-                if (oracleGetOriginalSqlMethod != null) {
-                    Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
-                    if (stmtSql instanceof String) {
-                        originalSql = (String) stmtSql;
-                    }
-                } else {
-                    Class<?> clazz = Class.forName(stmtClassName);
-                    oracleGetOriginalSqlMethod = getMethodRegular(clazz, "getOriginalSql");
-                    if (oracleGetOriginalSqlMethod != null) {
-                        //OraclePreparedStatementWrapper is not a public class, need set this.
-                        oracleGetOriginalSqlMethod.setAccessible(true);
-                        if (null != oracleGetOriginalSqlMethod) {
-                            Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
-                            if (stmtSql instanceof String) {
-                                originalSql = (String) stmtSql;
-                            }
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                //ignore
-            }
-        }
-        if (originalSql == null) {
-            originalSql = statement.toString();
-        }
-        originalSql = originalSql.replaceAll("[\\s]+", StringPool.SPACE);
-        int index = indexOfSqlStart(originalSql);
-        if (index > 0) {
-            originalSql = originalSql.substring(index);
-        }
-
-        // 计算执行 SQL 耗时
-        long start = SystemClock.now();
-        Object result = invocation.proceed();
-        long timing = SystemClock.now() - start;
-
-        // 格式化 SQL 打印执行结果
-        Object target = PluginUtils.realTarget(invocation.getTarget());
-        MetaObject metaObject = SystemMetaObject.forObject(target);
-        MappedStatement ms = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
-        StringBuilder formatSql = new StringBuilder()
-            .append(" Time:").append(timing)
-            .append(" ms - ID:").append(ms.getId())
-            .append(StringPool.NEWLINE).append("Execute SQL:")
-            .append(SqlUtils.sqlFormat(originalSql, format)).append(StringPool.NEWLINE);
-        if (this.isWriteInLog()) {
-            if (this.getMaxTime() >= 1 && timing > this.getMaxTime()) {
-                logger.error(formatSql.toString());
-            } else {
-                logger.debug(formatSql.toString());
-            }
-        } else {
-            System.err.println(formatSql.toString());
-            Assert.isFalse(this.getMaxTime() >= 1 && timing > this.getMaxTime(),
-                " The SQL execution time is too large, please optimize ! ");
-        }
-        return result;
-    }
-
-    @Override
-    public Object plugin(Object target) {
-        if (target instanceof StatementHandler) {
-            return Plugin.wrap(target, this);
-        }
-        return target;
-    }
-
-    @Override
-    public void setProperties(Properties prop) {
-        String maxTime = prop.getProperty("maxTime");
-        String format = prop.getProperty("format");
-        if (StringUtils.isNotEmpty(maxTime)) {
-            this.maxTime = Long.parseLong(maxTime);
-        }
-        if (StringUtils.isNotEmpty(format)) {
-            this.format = Boolean.valueOf(format);
-        }
-    }
-
-    /**
-     * 获取此方法名的具体 Method
-     *
-     * @param clazz      class 对象
-     * @param methodName 方法名
-     * @return 方法
-     */
-    public Method getMethodRegular(Class<?> clazz, String methodName) {
-        if (Object.class.equals(clazz)) {
-            return null;
-        }
-        for (Method method : clazz.getDeclaredMethods()) {
-            if (method.getName().equals(methodName)) {
-                return method;
-            }
-        }
-        return getMethodRegular(clazz.getSuperclass(), methodName);
-    }
-
-    /**
-     * 获取sql语句开头部分
-     *
-     * @param sql ignore
-     * @return ignore
-     */
-    private int indexOfSqlStart(String sql) {
-        String upperCaseSql = sql.toUpperCase();
-        Set<Integer> set = new HashSet<>();
-        set.add(upperCaseSql.indexOf("SELECT "));
-        set.add(upperCaseSql.indexOf("UPDATE "));
-        set.add(upperCaseSql.indexOf("INSERT "));
-        set.add(upperCaseSql.indexOf("DELETE "));
-        set.remove(-1);
-        if (CollectionUtils.isEmpty(set)) {
-            return -1;
-        }
-        List<Integer> list = new ArrayList<>(set);
-        list.sort(Comparator.naturalOrder());
-        return list.get(0);
-    }
-}