fix: DruidFilter记录日志
This commit is contained in:
@@ -205,7 +205,6 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- druid数据源驱动 -->
|
<!-- druid数据源驱动 -->
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
package org.nl.config;
|
||||||
|
|
||||||
|
import com.alibaba.druid.filter.FilterChain;
|
||||||
|
import com.alibaba.druid.filter.FilterEventAdapter;
|
||||||
|
import com.alibaba.druid.proxy.jdbc.JdbcParameter;
|
||||||
|
import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy;
|
||||||
|
import com.alibaba.druid.proxy.jdbc.ResultSetProxy;
|
||||||
|
import com.alibaba.druid.proxy.jdbc.StatementProxy;
|
||||||
|
import com.alibaba.druid.sql.SQLUtils;
|
||||||
|
import com.alibaba.druid.util.JdbcUtils;
|
||||||
|
import com.mysql.cj.jdbc.result.ResultSetImpl;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2023/2/10 11:27 上午
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class DruidFilter extends FilterEventAdapter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int preparedStatement_executeUpdate(FilterChain chain, PreparedStatementProxy statement) throws SQLException {
|
||||||
|
|
||||||
|
return super.preparedStatement_executeUpdate(chain, statement);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql) throws SQLException {
|
||||||
|
|
||||||
|
return super.statement_executeUpdate(chain, statement, sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
|
||||||
|
int size = statement.getParametersSize();
|
||||||
|
String executeSql = sql;
|
||||||
|
int count = 0;
|
||||||
|
try {
|
||||||
|
count = statement.getUpdateCount();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
}
|
||||||
|
if (count > 0) {
|
||||||
|
if (size > 0) {
|
||||||
|
Collection<JdbcParameter> values = statement.getParameters().values();
|
||||||
|
List<Object> params = new ArrayList<>();
|
||||||
|
for (JdbcParameter value : values) {
|
||||||
|
params.add(value.getValue());
|
||||||
|
}
|
||||||
|
executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params);
|
||||||
|
}
|
||||||
|
log.info("[----SQL----][update][ SQL: {} ]", executeSql);
|
||||||
|
}
|
||||||
|
super.statementExecuteAfter(statement, sql, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException {
|
||||||
|
ResultSetProxy rs = super.statement_getResultSet(chain, statement);
|
||||||
|
String executeSql = statement.getLastExecuteSql();
|
||||||
|
int result = 0;
|
||||||
|
if (rs != null) {
|
||||||
|
ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class);
|
||||||
|
result = rss.getRows().size();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
int size = statement.getParametersSize();
|
||||||
|
if (size > 0) {
|
||||||
|
Collection<JdbcParameter> values = statement.getParameters().values();
|
||||||
|
List<Object> params = new ArrayList<>();
|
||||||
|
for (JdbcParameter value : values) {
|
||||||
|
params.add(value.getValue());
|
||||||
|
}
|
||||||
|
executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.warn("[-SQL解析异常-][{}]", ex.getMessage());
|
||||||
|
}
|
||||||
|
log.info("[----SQL----][select][执行结果:{}][ SQL: {} ]", result, executeSql);
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.DbType;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
@@ -18,6 +19,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|||||||
*/
|
*/
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
public class MybatisPlusConfig {
|
public class MybatisPlusConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
druid.filters.DruidFilter=org.nl.config.DruidFilter
|
||||||
@@ -33,7 +33,7 @@ spring:
|
|||||||
max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
|
max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
|
||||||
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
|
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
|
||||||
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
||||||
use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
|
# use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
|
||||||
#filters通过别名的方式配置扩展插件,常用的插件有:
|
#filters通过别名的方式配置扩展插件,常用的插件有:
|
||||||
#监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
|
#监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
|
||||||
filter:
|
filter:
|
||||||
@@ -53,7 +53,7 @@ spring:
|
|||||||
login-username: admin
|
login-username: admin
|
||||||
login-password: admin
|
login-password: admin
|
||||||
dynamic:
|
dynamic:
|
||||||
primary: dm
|
primary: mysql
|
||||||
datasource:
|
datasource:
|
||||||
mysql:
|
mysql:
|
||||||
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||||
@@ -79,6 +79,25 @@ spring:
|
|||||||
username: ${nl.config.dm.username}
|
username: ${nl.config.dm.username}
|
||||||
password: ${nl.config.dm.password}
|
password: ${nl.config.dm.password}
|
||||||
type: com.alibaba.druid.pool.DruidDataSource
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
|
druid:
|
||||||
|
filters:
|
||||||
|
DruidFilter,stat
|
||||||
|
initial-size: 5 #初始化时建立物理连接的个数
|
||||||
|
min-idle: 15 #最小连接池数量
|
||||||
|
maxActive: 30 #最大连接池数量
|
||||||
|
maxWait: 3000 #获取连接时最大等待时间,单位毫秒
|
||||||
|
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
|
||||||
|
test-while-idle: true
|
||||||
|
time-between-eviction-runs-millis: 300000 #既作为检测的间隔时间又作为test-while-idle执行的依据
|
||||||
|
min-evictable-idle-time-millis: 900000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
|
||||||
|
#用来检测连接是否有效的sql
|
||||||
|
#mysql中为 select 'x'
|
||||||
|
#oracle中为 select 1 from dual
|
||||||
|
validation-query: SELECT 'x'
|
||||||
|
test-on-borrow: true #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
|
||||||
|
test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
|
||||||
|
pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
|
||||||
|
max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
|
||||||
flyway:
|
flyway:
|
||||||
#开启
|
#开启
|
||||||
enabled: false
|
enabled: false
|
||||||
@@ -235,7 +254,7 @@ mybatis-plus:
|
|||||||
map-underscore-to-camel-case: false
|
map-underscore-to-camel-case: false
|
||||||
call-setters-on-nulls: true
|
call-setters-on-nulls: true
|
||||||
jdbc-type-for-null: null
|
jdbc-type-for-null: null
|
||||||
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
|
||||||
mapper-locations:
|
mapper-locations:
|
||||||
- classpath:/org/nl/**/mapper/**/*.xml
|
- classpath:/org/nl/**/mapper/**/*.xml
|
||||||
global-config:
|
global-config:
|
||||||
|
|||||||
Reference in New Issue
Block a user