我想使用Druid的Filter功能,但是不想使用连接池功能。
请问该如何配置?有没有案例。
我想使用Druid的Filter功能,但是不想使用连接池功能。
请问该如何配置?有没有案例。
没有连接池怎么可能直接使用filter。 如果是指想实现filter中的一些效果,应该是自己解析sql然后还相应操作。自己照着filter的代码解析sql拿到SQLStatement对象,然后就可以做自己的功能了:
MySqlStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
没有连接池怎么可能直接使用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的代理好了。
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
DruidDriver
非常感谢你的方案,之前确实不知道DruidDriver的这个功能。这种方案可以做到将Filter功能和其他的数据源结合。
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
这个方案可以解决我遇到的问题,但不是最好的,我真正想做的是对逻辑数据源(由多个物理数据源组组成)做拦截,而非对物理数据源做代理。