Springboot连接 Druid数据源报错Failed to obtain JDBC Connection: dbType not support

前言

    最近项目中需要配置多数据源,在执行查询方法时遇到一个错误Failed to obtain JDBC Connection: dbType not support,记录下解决过程。

正文

问题再现

Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection: dbType not support : com.alibaba.druid.pool.DruidDataSource, url jdbc:p6spy:mysql://127.0.0.1:3306/Mytest?autoReconnect=true&useSSL=false&characterEncoding=utf-8
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
	... 80 common frames omitted

在这里插入图片描述

原因

     从字面意思上看是数据类型不支持什么东西,是什么呢?
将yaml文件druid 配置的 sql 防火墙(下图中的wall)关掉,问题解决。
在这里插入图片描述

总结

    记录下这次填坑的的过程,希望给他人带来帮助,可以少踩些坑。

### Java Druid 动态数据源 `java.lang.IllegalStateException: dbType not supported` 解决方案 当遇到 `dbType not supported` 错误时,通常是因为 Druid 数据库连接池未能识别所使用的数据库类型。以下是详细的解决方案: #### 1. 配置文件检查 确保配置文件中的数据库连接前缀正确无误。如果前缀有误,则可能导致数据源注入失败,进而引发 `dbType not supported` 的异常[^5]。 ```yaml spring: datasource: dynamic: primary: master strict: false datasource: master: url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver slave: url: jdbc:mysql://localhost:3306/slave_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` #### 2. 明确指定数据库类型 在某些情况下,Druid 可能无法自动检测到数据库类型。可以在配置中显式声明 `type` 属性来帮助 Druid 正确认识数据库种类[^4]。 ```properties spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.db-type=mysql ``` 对于 Kingbase 这样的特殊数据库,可能需要额外处理以确保兼容性。 #### 3. 移除不必要的过滤器 有时特定的过滤器可能会干扰正常的数据源初始化过程。例如,在使用 StatFilter 或 WallFilter 时可能出现此类问题。可以尝试移除这些过滤器或将它们禁用后再测试应用是否能够成功启动[^2]。 ```java @Bean public DataSource dataSource() { DruidDataSource ds = new DruidDataSource(); // 设置其他必要的参数... List<Filter> filters = Arrays.asList(new LogFilter(), new ConfigFilter()); ds.setProxyFilters(filters); return ds; } ``` 通过以上措施应该可以有效解决由于 `dbType` 不匹配引起的应用程序启动失败问题。务必仔细核对所有的配置项以及依赖版本之间的兼容情况。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值