springboot+mybatis列印sql執行時間
阿新 • • 發佈:2020-07-29
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(); } }