[alibaba/druid]Filter可否单独使用

2025-11-10 86 views
9

我想使用Druid的Filter功能,但是不想使用连接池功能。

请问该如何配置?有没有案例。

回答

6

没有连接池怎么可能直接使用filter。 如果是指想实现filter中的一些效果,应该是自己解析sql然后还相应操作。自己照着filter的代码解析sql拿到SQLStatement对象,然后就可以做自己的功能了:

MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
8

没有连接池怎么可能直接使用filter。 如果是指想实现filter中的一些效果,应该是自己解析sql然后还相应操作。自己照着filter的代码解析sql拿到SQLStatement对象,然后就可以做自己的功能了:

MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();

系统已经有数据库连接池了,但不是druid。现在想对sql做拦截,本来想自己写connection,preparestatement的代理,但是看到druid的filter挺成熟的,就想直接拿来用。不过暂时发现druid的filter功能和连接池功能好像是绑定的,即filter无法抛开DruidDataSource使用。所以有人知道怎么处理这个问题吗?如果真不行的话,我还是自己写connection,preparestatement的代理好了。

4

driver使用

com.alibaba.druid.proxy.DruidDriver

url加上指定前缀(自己配置需要开启的filter别名)

jdbc:wrap-jdbc:driver=com.mysql.jdbc.Driver:filters=slf4j

示例配置如下:

xxxxxxDataSource.driverClassName=com.alibaba.druid.proxy.DruidDriver
xxxxxxDataSource.url=jdbc:wrap-jdbc:driver=com.mysql.jdbc.Driver:filters=slf4j:jdbc:mysql:127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
8

DruidDriver

非常感谢你的方案,之前确实不知道DruidDriver的这个功能。这种方案可以做到将Filter功能和其他的数据源结合。

3

driver使用

com.alibaba.druid.proxy.DruidDriver

url加上指定前缀(自己配置需要开启的filter别名)

jdbc:wrap-jdbc:driver=com.mysql.jdbc.Driver:filters=slf4j

示例配置如下:

xxxxxxDataSource.driverClassName=com.alibaba.druid.proxy.DruidDriver
xxxxxxDataSource.url=jdbc:wrap-jdbc:driver=com.mysql.jdbc.Driver:filters=slf4j:jdbc:mysql:127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8

这个方案可以解决我遇到的问题,但不是最好的,我真正想做的是对逻辑数据源(由多个物理数据源组组成)做拦截,而非对物理数据源做代理。