druid数据源集成p6spy踩坑

5,225 阅读1分钟

我项目中用的mybatis-plus,但是mp在3.2.0以上版本移除了性能分析插件,转而使用p6spy,好吧,配置很简单,毕竟springboot,一顿复制粘贴,搞定,运行,然后华丽地报错了:

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection: dbType not support : null, url jdbc:p6spy:mysql://localhost:3306/weimi?allowMultiQueries=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&useAffectedRows=true&tinyInt1isBit=false&useTimezone=true&serverTimezone=UTC

dbType不支持,不支持什么?怀疑是mysql8的原因,遂换成5.5,报错依旧,然后怀疑是连接池的原因,于是翻看Druid文档,看到如下一段话:

WallFilter目前支持哪些数据库?WallFilter针对不同的数据库使用不同的SQL Parser和相关配置信息,力求完整理解其SQL语义,从而做更准确的防御手段。Druid目前支持mysql和oracle、sql server,下一步会支持postgres。

所以,要么关闭Druid的wallFilter,要么换数据源- -。

关闭方法1:

在你的DruidConfig文件(如果有)中应该有类似这样的配置:

List<Filter> filters = new ArrayList<>();
filters.add(wallFilter());

注释之。

关闭方法2:

application.properties中配置:

spring.datasource.druid.filters=stat,wall

去掉wall就行了。

值得注意的是,mysql8.x和mysql5.x的driver-class-name是不同的,但是在p6spy的spy.properties配置文件中不需要写com.mysql.cj.jdbc.Driver,它会自动识别。