springboot整合多数据源以及切换遇到的坑 Caused by: java.lang.IllegalStateException: dbType not support : null

发布时间:2024-07-01 13:01

springboot整合多数据源以及切换遇到的坑 Caused by: java.lang.IllegalStateException: dbType not support : null

  • 1.原因是阿里的Druid连接池只支持阿里自主研发的数据库 不支持其他的国产数据库
    • 1.1 package com.alibaba.druid.wall;WallFilter 防火墙过滤的部分源码。清晰的可以看出支持的数据库类型。
  • 2.解决方案,将druid的防火墙给关闭就行。
    • 2.1只需要在yml中druid将加入:
      • 错误的配置
      • 正确的配置(去除防火墙过滤)
  • 3.重新启动

1.原因是阿里的Druid连接池只支持阿里自主研发的数据库 不支持其他的国产数据库

报错截图:
在这里插入图片描述

1.1 package com.alibaba.druid.wall;WallFilter 防火墙过滤的部分源码。清晰的可以看出支持的数据库类型。

{
            if (!"mysql".equals(this.dbType) && !"mariadb".equals(this.dbType) && !"h2".equals(this.dbType) && !"presto".equals(this.dbType)) {
                if (!"oracle".equals(this.dbType) && !"AliOracle".equals(this.dbType)) {
                    if (!"sqlserver".equals(this.dbType) && !"jtds".equals(this.dbType)) {
                        if (!"postgresql".equals(this.dbType) && !"edb".equals(this.dbType)) {
                            if (!"db2".equals(this.dbType)) {
                                throw new IllegalStateException("dbType not support : " + this.dbType + ", url " + dataSource.getUrl());
                            }

                            if (this.config == null) {
                                this.config = new WallConfig("META-INF/druid/wall/db2");
                            }

                            this.provider = new DB2WallProvider(this.config);
                        } else {
                            if (this.config == null) {
                                this.config = new WallConfig("META-INF/druid/wall/postgres");
                            }

                            this.provider = new PGWallProvider(this.config);
                        }
                    } else {
                        if (this.config == null) {
                            this.config = new WallConfig("META-INF/druid/wall/sqlserver");
                        }

                        this.provider = new SQLServerWallProvider(this.config);
                    }
                } else {
                    if (this.config == null) {
                        this.config = new WallConfig("META-INF/druid/wall/oracle");
                    }

                    this.provider = new OracleWallProvider(this.config);
                }
            } else {
                if (this.config == null) {
                    this.config = new WallConfig("META-INF/druid/wall/mysql");
                }

                this.provider = new MySqlWallProvider(this.config);
            }

            this.provider.setName(dataSource.getName());
            this.inited = true;
        }
    }

2.解决方案,将druid的防火墙给关闭就行。

2.1只需要在yml中druid将加入:

错误的配置

在这里插入图片描述

正确的配置(去除防火墙过滤)

filters: config,stat

3.重新启动

在这里插入图片描述
报错解决。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号