☰
Apache Doris JDBC 实战指南:连接配置、Spring 工程落地与排障速查
2026/11/4 6:49:21 网站建设 项目流程

Apache Doris JDBC 实战指南:连接配置、Spring 工程落地与排障速查

【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris

Java 应用要查 Apache Doris,最短路径就是 JDBC:FE 的查询端口讲 MySQL 协议,配上 MySQL 驱动连上 9030 端口即可读写。下面以仓库里现成的spring-jdbc-demo工程为样本,讲清楚三件事:连接串怎么配、Spring Boot 查询服务怎么搭、连不上或查得慢时从哪里查起。

选型:JDBC 管查询,Stream Load 管写入

先划清边界,能省掉后面很多弯路:

场景推荐通道说明
报表接口、交互式查询、小批量更新JDBC(MySQL 协议,FE 9030 端口)应用侧最通用,本文主题
大批量数据导入Stream Load(HTTP 接口)逐行 JDBC INSERT 写入慢且容易产生碎片,仓库有 samples/doris-demo/stream-load-demo/ 可参考
非 Java 技术栈各语言示例samples/connect/ 下提供 Python、Go、Node.js、PHP、C++、Java 六份最小连接样例

一句话结论:读走 JDBC,大批量写走 Stream Load,两者不是竞争关系。

JDBC 连接串怎么配:端口、驱动和 URL 参数

连接信息只需要四要素,端口可以直接从 conf/fe.conf 里的query_port = 9030确认:

  • host:任一 FE 节点地址;
  • port:9030,即 FE 的 query_port,不是 HTTP 端口 8030;
  • database:目标库名,跟在 URL 路径里;
  • user / password:默认root,空密码。

最小可运行的 URL 长这样,整串就是"协议 + 地址端口 + 库名 + 编码参数":

jdbc:mysql://fe-host:9030/demo_db?useUnicode=true&characterEncoding=utf8

驱动类名按驱动大版本区分:8.x 系列用com.mysql.cj.jdbc.Driver,5.x 系列用com.mysql.jdbc.Driver。驱动和 Doris 大版本的对应关系如下,装错版本一般表现为握手报错或连接直接被拒:

Doris 版本建议的 MySQL 驱动
1.0.xmysql-connector-java 5.1.47
1.1.xmysql-connector-java 8.0.26
1.2.x 及以上8.0.30 及以上;也可用官方org.apache.doris:doris-jdbc(如 1.2.0)

如果想脱离 Spring 先验证连通性,samples/connect/java/client/src/main/java/client/Client.java 是一个 100 多行的裸DriverManager示例,覆盖建库、建表、插入、查询、删库全流程,跑通它再谈框架。

照着 spring-jdbc-demo 搭一个 Doris 查询服务

完整源码在 samples/doris-demo/spring-jdbc-demo/,配套说明见 samples/doris-demo/spring-jdbc-demo/docs/instructions.md。技术栈是 Spring Boot 2.2.0 + MyBatis 1.3.2 + Druid 1.1.14 + mysql-connector-java 8.0.28。

工程骨架:每个包负责什么

各包的分工,对应上面截图里的目录:

包职责
configDruid 数据源构建与 Web 配置
datasource动态数据源路由(多数据源切换的核心)
controllerREST 接口,把查询结果以 JSON 吐出去
service/mapper业务方法与 MyBatis SQL 映射
utilSpring 上下文工具类

有一个容易踩的坑藏在启动类里:DorisApplication上写了@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。原因是工程自己手搓了 master/slave 两个 Druid 数据源,如果把 Spring Boot 的数据源自动装配也留着,两边会互相打架,启动时要么报冲突、要么连的不是你以为的那个库。凡是自定义数据源,都建议做同样的排除。

动态路由由DynamicDataSource完成,它继承 Spring 的AbstractRoutingDataSource:每次执行 SQL 前回调determineCurrentLookupKey(),从线程上下文里取出当前请求该走哪个数据源,再路由到对应的 master 或 slave 连接池。单数据源场景用不上这套,但"主写从读"或多库切换场景照抄即可。

两个 REST 接口如何把数据查出来

服务起来后,浏览器直接访问两个地址就能看到效果。

第一个是查全量列表,访问localhost:8080/rest/demo/skulist,返回所有商品的 JSON:

调用链很短:DemoController收到请求 →DemoService透传 →DemoMapper(MyBatis 的 XML 映射)执行 SELECT → 结果经 fastjson 序列化输出。

第二个是带路径参数的单条查询,访问/rest/demo/skulist/{skuId},按商品 ID 精确过滤:

注意示例用的表结构和测试数据都来自stream-load-demo(instructions.md里有说明),也就是"Stream Load 写进来,JDBC 查出去",正好对应第一节划的分工。

Druid 连接池参数:哪些值得改,怎么改

连接参数在src/main/resources/application-druid.yml里,示例值是 9030 端口的一个测试库。逐项解释:

参数示例值人话解释
initialSize5应用启动时预建的连接数
minIdle10空闲时至少保留多少条,避免冷启动慢
maxActive20连接硬上限,超出的请求开始排队
maxWait60000拿连接最多等 60 秒,再等不下去就报错
validationQuerySELECT 1 FROM DUAL探测连接是否还活着的哨兵语句
minEvictableIdleTimeMillis300000空闲超过 5 分钟的回填回池子
slow-sql-millis1000超过 1 秒的 SQL 记入慢日志
statViewServlet/druid/*打开 Druid Web 控制台看 SQL 统计,需配好账号

真正决定吞吐的是maxActive:并发超过它,请求就在maxWait内排队,表现就是接口偶尔卡一下然后超时。调大前先确认 FE 端承受得住,盲目放大只是把压力往后挪。另外建议把log-slow-sql打开,配合慢日志阈值,慢在哪条 SQL 上一目了然。

排障速查:连不上、查得慢、驱动不匹配

现象先查什么
连接超时 / Connection refusedtelnet fe-host 9030验证端口;确认连的是 query_port 而不是 8030;检查安全组与防火墙;必要时在 URL 里加socketTimeout拉长等待
Access denied账号密码;默认root是空密码,URL 里漏写password=时驱动可能按交互提示卡住
报驱动类找不到Class.forName的类名与驱动大版本不匹配(5.x 与 8.x 的包名不同),对照上面的版本表修正
接口偶发变慢先怀疑连接池排队:看maxActive与maxWait;再看慢 SQL 日志是否命中大查询
慢查询稳定复现EXPLAIN看执行计划;确认分区条件是否被利用;只 SELECT 需要的列,别整表SELECT *
写入吞吐上不去别再往 JDBC INSERT 上堆并发了,换 Stream Load

还有一类隐蔽问题:应用连上了但查不到数据,先确认 URL 路径里写的库名,示例工程连的是test_2这类测试库,和生产库不是一个。

下一步:把示例工程跑起来

按下面命令克隆仓库,进入示例目录构建运行,然后浏览器访问localhost:8080/rest/demo/skulist验证(需先改application-druid.yml里的连接信息):

git clone https://gitcode.com/gh_mirrors/dori/doris cd doris/samples/doris-demo/spring-jdbc-demo && mvn spring-boot:run

想继续看其他接入方式,从 samples/doris-demo/ 的 README 出发,Flink、Spark、Stream Load 的 demo 都在里面。

【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询