1. 程式人生 > 實用技巧 >springboot+mybatis列印sql執行時間

springboot+mybatis列印sql執行時間

package com.pacmp.config.interceptors;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;

import java.sql.Statement;
import java.util.Properties;

/**
 * @Author 
 * @Date 2020/7/29 14:19
 * @Version 版本號
 * @Description mybatis執行sql耗時
 
*/ @Slf4j @Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class})}) public class SqlStatementInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { long startTime = System.currentTimeMillis();
try { return invocation.proceed(); } finally { long timeConsuming = System.currentTimeMillis()-startTime; log.debug("執行SQL:{}ms", timeConsuming); if(timeConsuming>999&&timeConsuming<5000){ log.debug("執行SQL大於1s:{}ms", timeConsuming); }
else if(timeConsuming>=5000&&timeConsuming<10000){ log.debug("執行SQL大於5s:{}ms", timeConsuming); }else if(timeConsuming>=10000){ log.debug("執行SQL大於10s:{}ms", timeConsuming); } } } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { } }
package com.pacmp.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.pacmp.config.interceptors.SqlStatementInterceptor;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.annotation.Resource;

/**
 * @Author 
 * @Date 2020/7/29 14:28
 * @Version 版本號
 * @Description mybatis執行sql耗時
 */
@Configuration
public class MyBatisConfig {

    @Resource
    private DruidDataSource dataSource;

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{new SqlStatementInterceptor()});
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources("classpath*:mapper/*.xml"));
        sqlSessionFactoryBean.setTypeAliasesPackage("com.pacmp.mapper");
        return sqlSessionFactoryBean.getObject();
    }

}