当前位置:网站首页>jfinal中如何使用过滤器监控Druid监听SQL执行?
jfinal中如何使用过滤器监控Druid监听SQL执行?
2022-06-29 18:58:00 【InfoQ】
配置过滤器
public void configPlugin(Plugins me) {
DruidPlugin druidPlugin = createDruidPlugin_holdoa();
druidPlugin.setPublicKey(p.get("publicKeydebug").trim());
wallFilter = new WallFilter();
wallFilter.setDbType("mysql");
druidPlugin_oa.addFilter(wallFilter);
druidPlugin_oa.addFilter(new StatFilter());
me.add(druidPlugin);
}import com.alibaba.druid.filter.FilterEventAdapter;
public class DataScopeFilter extends FilterEventAdapter {
}public boolean statement_execute(FilterChain chain, StatementProxy statement, String sql) throws SQLException {...}
protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) {...}
protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) {...}
protected void statementExecuteQueryBefore(StatementProxy statement, String sql) {...}
protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) {...}
protected void statementExecuteBefore(StatementProxy statement, String sql) {...}
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {...}package xxxx.xxxx;
import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterEventAdapter;
import com.alibaba.druid.proxy.jdbc.ResultSetProxy;
import com.alibaba.druid.proxy.jdbc.StatementProxy;
import com.jfinal.kit.LogKit;
import java.sql.SQLException;
public class DataScopeFilter extends FilterEventAdapter {
@Override
public boolean statement_execute(FilterChain chain, StatementProxy statement, String sql) throws SQLException {
LogKit.info("statement_execute");
return super.statement_execute(chain, statement, sql);
}
@Override
protected void statementExecuteQueryBefore(StatementProxy statement, String sql) {
LogKit.info("statementExecuteQueryBefore");
super.statementExecuteQueryBefore(statement, sql);
}
@Override
protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) {
LogKit.info("statementExecuteQueryAfter");
super.statementExecuteQueryAfter(statement, sql, resultSet);
}
@Override
protected void statementExecuteBefore(StatementProxy statement, String sql) {
LogKit.info("statementExecuteBefore");
super.statementExecuteBefore(statement, sql);
}
@Override
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
LogKit.info("statementExecuteAfter");
super.statementExecuteAfter(statement, sql, result);
}
@Override
public ResultSetProxy statement_executeQuery(FilterChain chain, StatementProxy statement, String sql)
throws SQLException {
LogKit.info("statement_executeQuery");
return super.statement_executeQuery(chain, statement, sql);
}
}druidPlugin.addFilter(new DataScopeFilter());statement_executeQuery
statementExecuteQueryBefore
statementExecuteQueryAfter@Override
public ResultSetProxy statement_executeQuery(FilterChain chain, StatementProxy statement, String sql)
throws SQLException {
statementExecuteQueryBefore(statement, sql);
try {
ResultSetProxy resultSet = super.statement_executeQuery(chain, statement, sql);
if (resultSet != null) {
statementExecuteQueryAfter(statement, sql, resultSet);
resultSetOpenAfter(resultSet);
}
return resultSet;
} catch (SQLException error) {
statement_executeErrorAfter(statement, sql, error);
throw error;
} catch (RuntimeException error) {
statement_executeErrorAfter(statement, sql, error);
throw error;
} catch (Error error) {
statement_executeErrorAfter(statement, sql, error);
throw error;
}
} @Override
public ResultSetProxy statement_executeQuery(FilterChain chain, StatementProxy statement, String sql)
throws SQLException {
statementExecuteQueryBefore(statement, sql);
ResultSetProxy result = chain.statement_executeQuery(statement, sql);
statementExecuteQueryAfter(statement, sql, result);
return result;
}statementExecuteQueryBefore
statement_executeQuery
statementExecuteQueryAftersql被声明为final类型
public class DruidPooledPreparedStatement extends DruidPooledStatement implements PreparedStatement {
private final static Log LOG = LogFactory.getLog(DruidPooledPreparedStatement.class);
private final PreparedStatementHolder holder;
private final PreparedStatement stmt;
private final String sql;
....
}@Override
public PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql)
throws SQLException {
// 可以达到修改SQL的目的
sql += " LIMIT 1";
PreparedStatementProxy statement = super.connection_prepareStatement(chain, connection, sql);
statementPrepareAfter(statement);
return statement;
}边栏推荐
- Apache inlong million billion level data stream processing
- Rejected by a large company? Tencent experts summarized 11 reasons for being rejected!
- TP5 where queries whether a field in the database contains a value. Fuzzy queries are performed without the like method
- Redis(一)--Redis入门(2)--Redis数据类型
- 1. use stm32cubemx to establish stm32g030c8t6 project
- AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
- 移动端测试
- 2. 银河麒麟离线模式下如何安装MySQL数据库
- 4-1端口扫描技术
- 为什么信息化 ≠ 数字化?终于有人讲明白了
猜你喜欢

SQL Server Backup and restore command operations

Unittest unit test framework

The developer task center is online! Thousands of yuan of gifts!

selenium的跨浏览器测试

电脑ssd硬盘怎么安装使用

信息系统项目管理师---第七章项目成本管理历年考题

习题8 #第8章 Verilog有限状态机设计-4 #Verilog #Quartus #modelsim

虎符限币种提现 用户曲线出金即亏损

2. 在STM32CubeMX建立的Keil5工程中添加自定义的相关文件

Seven cattle image access parameters (thumbnails are small in size to avoid wasting traffic)
随机推荐
selenium的跨浏览器测试
76.二叉树的最近公共祖先
揭秘!付费会员制下的那些小心机!
[daily training] 535 Encryption and decryption of tinyurl
开发者任务中心上线!千元豪礼送不停!
Selenium的各类API方法
Redis(一)--Redis入门(1)--Redis介绍、安装与启动、常用配置
MariaDB的安装与配置
企业数字化转型的点、线、面、体!
乐鑫面试流程
正则表达式系列之手机号码正则
The developer task center is online! Thousands of yuan of gifts!
微信推出图片大爆炸功能;苹果自研 5G 芯片或已失败;微软解决导致 Edge 停止响应的 bug|极客头条
MySQL enterprise development specification
数据基础设施升级窗口下,AI 新引擎的技术方法论
Mobile end test
Flutter 2.0 FocusScope. of(context). The requestfocus (focusnode()) does not take effect
2. how to install MySQL database in Galaxy Kirin offline mode
聊聊eureka的delta配置
细说GaussDB(DWS)复杂多样的资源负载管理手段