KingbaseES JDBC 驱动程序的使用方法和配置

1、 单实例

例如:jdbc:kingbase8://192.168.8.127:54321/test

2、 主备集群(1+1)

例如:jdbc:kingbase8://192.168.8.200:54321/test

注:192.168.8.200 是 VIP

3、 读写集群(1+2)

只使用 URL 进行配置一主两备集群

例如:

jdbc:kingbase8://192.168.8.128:54321/test?USEDISPATCH=true&SLAVE_ADD=192.168.8.129,192

.168.8.130&SLAVE_PORT=54321,54321&nodeList=node1,node2,node3

使用 URL+配置文件进行配置一主两备集群

例如:

jdbc:kingbase8://192.168.8.128:54321/test?ConfigurePath=jdbc.conf

jdbc.conf 配置文件例子:

USEDISPATCH=true

SLAVE_ADD=192.168.8.129,192.168.8.130

SLAVE_PORT=54321,54321

nodeList=node1,node2,node3

参数配置:

ConfigurePath = String

指定配置文件的路径,只能在连接串中配置,值为 null 时,不读取配置文件,默认取值为:

null。当连接参数较多时,可通过配置文件配置连接参数。当文件中配置的连接参数与 URL

中的参数重复时,会覆盖掉 URL 中的参数值。

USEDISPATCH = Boolean

指定是否使用读写分离功能,默认取值为:false。此配置项关闭 JDBC 就变成单机 JDBC,无

读写分离功能。

TransactionDispatchStrategy = String

指定事务中的分发策略,1 表示事务都不分发,2 表示事务中的写语句之前的读语句可以分

发,默认取值为:“2”。此功能开启需要同时开启读写分离功能。

HOSTLOADRATE = String

指定主机的读语句负载率,默认取值为:“0”。此功能开启需要同时开启读写分离功能。

根据当前发给主机的语句数目与总语句数目的比例与 HOSTLOADRATE 设置的比例进行比较,当前者大于后者时,发给备机,否则发给主机,当总语句数目达到 Integer.MAX_VALUE 时,

用当前分发的实际比例的分子分母更新当前发给主机的语句数目与总语句数目。

SLAVE_ADD = String

指定备机地址,可指定多个,用“

,”隔开。此功能开启需要同时开启读写分离功能。

SLAVE_PORT = String

指定备机端口,与备机地址对应,可指定多个,用“

,”隔开。此功能开启需要同时开启读

写分离功能且设置备机地址。

RETRYTIMES = String

指定失败重发的最高次数,默认取值为:“10”。此功能开启需要同时开启读写分离功能。

RETRYINTERVAL = String

指定每次失败重发之间的时间间隔,单位是秒,默认取值为:“5”。此功能开启需要同时

开启读写分离功能且重试次数大于 0。

forwardStandby = Boolean

指定发送给备机的语句如果出现 I/O 错误,是否优先将错误语句转发给其他备机,默认值为

false。 此功能开启需要同时开启读写分离功能。

WhiteList = String

WhiteList 指 定 只 读 函 数 列 表 , 可 指 定 多 个 , 各 个 函 数 之 间 用 分 号 分 隔 , 如 :

WhiteList=MAX;COUNT;AVG 这样,默认取值为:null。

目前只支持函数名字的比较,不支持

函数名重载的区分。此功能开启需要同时开启读写分离功能。

BlackList = String

默认情况下认为函数都是只读的,BlackList 指定写函数列表,可指定多个,各个函数之间用

分号分隔,如:BlackList=updateXXX;writeXXX 这样,默认取值为:null。

目前只支持函数名

字的比较,不支持函数名重载的区分。不与 WhiteList 同时配置,与 WhiteList 同时配置时,

只有 BlackList 生效。此功能开启需要同时开启读写分离功能。

MasterFunctionList = String

指定只发主机,但不改变事务状态的函数语句列表,可指定多个,各个函数之间用分号分隔,

如:MasterFunctionList=updateXXX;writeXXX 这样,默认取值为:null。 目前只支持函数名

字的比较,不支持函数名重载的区分。此功能开启需要同时开启读写分离功能。

TempTable = String

指定临时表,如果是查询临时表的查询语句,则只发主机且不改变事务状态。可指定多个,

各个表名之间用分号分隔,如:aaa;bbb 这样,默认取值为:null。 此功能开启需要同时

开启读写分离功能。

BlackSqlList = String

指定只发主机,但不改变事务状态的 sql 语句列表,可指定多个,各个语句之间用分号分隔,

如:BlackSqlList=SET TRANSACTION READ WRITE;BEGIN READ WRITE 这样,默认取值为:null。

此功能开启需要同时开启读写分离功能。

最佳实践

以上参数大多使用默认值即可,也可根据需求进行修改。

注意事项:

a. 集群状态正常,sockettimeout 设置大于 0 时,为什么执行时间超长的事务会失败并导致

jdbc 重建连接?

答:sockettimeout 是控制底层 socket 超时返回的最长时间,默认是 0,即没有超时无限等待。如果指定大于 0 的值,意思就是最多等待 sockettimeout 的时间,socket 的 receive 操作就会

返回。这主要是用来防止当 server 掉线时,client 端 socket 的 receive 操作会一直等待。但是

这会带来副作用,就是如果一条语句真的执行很长时间超过了 sockettimeout 的值时,会被

认为是超时而中断 receive 返回超时错误。如果是在读写分离状态下,超时会造成重建连接

重发语句。此时需要根据用户的语句最长执行时间来设置 sockettimeout 或者设置为 0 一直

等待。如果应用自己有防这种 JDBC 操作一直不返回的机制,JDBC 调用不返回,应用会有自

己的超时控制,那就不需要 JDBC 设置 sockettimeout,让应用自己控制超时时间就好。如果

应用没有这种防止机制,一个 JDBC 操作不返回就会造成应用完全卡死,那就需要设置 JDBC

的 sockettimeout 值,让 JDBC 来控制超时时间。

b、读操作和写操作分别放在不同事务中。

二、金仓客户端连接串配置

1、单机

数据库开发工具 KStudio v2.0.0,数据库,新建连接,常规,填写主机 IP、

端口、数据库、用户名、密码即可;

或 URL 模板

例如:jdbc:kingbase8://192.168.8.127:54321/test

2、主备集群(1+1)

数据库开发工具 KStudio v2.0.0,数据库,新建连接,常规,填写主机 IP、

端口、数据库、用户名、密码即可;

或 URL 模板

例如:jdbc:kingbase8://192.168.8.200:54321/test

注:192.168.8.200 是 VIP

3、读写集群(1+2)

编辑驱动器设置,URL 模板,填写如下内容:

例如:

jdbc:kingbase8://192.168.8.128:54321/TEST?USEDISPATCH=true&SLAVE_ADD=

192.168.8.129,192.168.8.130&SLAVE_PORT=54321,54321&nodeList=node1,nod

e2, node3

发表评论