Tencent/APIJSON

新增数据源问题

EdisonKon opened this issue · 5 comments

环境信息

  • 系统: mac
  • JDK: 1.8
  • 数据库: mysql,doris
  • APIJSON: 4.7.0

问题描述

我新增了一个doris的数据源, 新增数据源没问题, 但是DemoSQLExecutor中getConnection最后调用AbstractSQLExecutor的getConnection
我认为如下这一行存疑,应该是getDatasource()
this.connection = (Connection)this.connectionMap.get(config.getDatabase());
因为根据DemoSQLExecutor中connectionMap的key是数据源类型,而不是数据库类型

错误信息

image

database 和 datasource 都可以作为数据源的标识。
但 database 仅限 MYSQL, POSTGRESQL, ORACLE, SQLSERVER, DB2;
而 datasource 可以是一个任意 String ,完全由业务定义。

这个 Demo 里因为用了 Druid, HikariCP 等连接池连接同一个 database,所以用 datasource 区分。

为了更好地兼容混合使用场景,腾讯某同事(也是 APIJSON 的长期用户)已经把 AbstractSQLExecutor.getConnection 中仅用 database 区分改为了 database + "-" + datasource
#262

既然是这样,那我觉得是不是应该将database和datasource都取一次值,然后再判空呢?
因为database没法自定义,只能是那几个值,datasource又不适用,导致永远无法使用到自己的数据源
解决办法:
1.在自己实现的AbstractSQLExecutor子类中重写父类方法中的所有内容
2.AbstractSQLExecutor子类中setDatabase的值...(这个方法不好)
3.作者大佬修改取database为database和datasource

为什么 datasource 会不适用呢?这个在子类重写方法,完全是你们自己业务定义的,和数据源想怎么映射就怎么映射

为什么 datasource 会不适用呢?这个在子类重写方法,完全是你们自己业务定义的,和数据源想怎么映射就怎么映射

不是不适用,字错了,是没有使用上,父类中没用到这个值,看一下我第一句话的描述

看到了#262,关了这个issue