新增数据源问题
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是数据源类型,而不是数据库类型
错误信息
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 会不适用呢?这个在子类重写方法,完全是你们自己业务定义的,和数据源想怎么映射就怎么映射
不是不适用,字错了,是没有使用上,父类中没用到这个值,看一下我第一句话的描述