You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法为Quarkus反应式数据源配置queryTimeout与connection keepAlive

Quarkus反应式Oracle客户端:配置查询超时与连接保活

查询超时(queryTimeout)

Quarkus官方文档未直接提供全局queryTimeout配置项,但可通过以下两种方式实现查询超时控制:

1. 单查询级别设置超时

编写反应式查询时,直接调用Vert.x Oracle Client API的超时方法,针对单个查询生效:

client.preparedQuery("SELECT * FROM users WHERE id = ?")
  .timeout(5, TimeUnit.SECONDS) // 设置5秒查询超时
  .execute(Tuple.of(1))
  .subscribe(result -> {
      // 处理结果
  }, error -> {
      // 处理超时异常
  });

2. 全局默认超时配置

通过Quarkus的配置项传递Vert.x Oracle Client底层参数,在application.properties中添加全局默认超时:

quarkus.datasource.reactive.oracle.connect-options.statement-timeout=5

该配置会映射到Vert.x的OracleConnectOptions.setStatementTimeout()方法,单位为秒,对所有查询生效。

连接保活(keepAlive)

连接保活需从TCP网络层和Oracle会话层两方面配置:

1. TCP层连接保活

通过Quarkus配置Vert.x的TCP保活参数,在application.properties中添加:

quarkus.datasource.reactive.oracle.connect-options.tcp-keep-alive=true
quarkus.datasource.reactive.oracle.connect-options.tcp-keep-idle=300
quarkus.datasource.reactive.oracle.connect-options.tcp-keep-interval=60
quarkus.datasource.reactive.oracle.connect-options.tcp-keep-count=5

参数说明:

  • tcp-keep-alive:开启TCP保活机制
  • tcp-keep-idle:连接空闲300秒后开始发送保活探测包
  • tcp-keep-interval:保活探测包的发送间隔为60秒
  • tcp-keep-count:连续5次未收到响应则判定连接失效

2. Oracle会话层保活

可通过Oracle服务器端的sqlnet.ora配置SQLNET.EXPIRE_TIME参数,让服务器定期检查客户端连接:

SQLNET.EXPIRE_TIME=10

此配置会让Oracle服务器每隔10分钟向客户端发送探测包,无响应则关闭连接。若无法修改服务器配置,可在客户端定期执行轻量心跳查询,比如:

// 每隔5分钟执行一次心跳
Vertx.vertx().setPeriodic(5 * 60 * 1000, id -> {
    client.query("SELECT 1 FROM DUAL")
          .execute()
          .subscribe();
});

注意:以上配置需确保使用Quarkus 2.13及以上版本的反应式Oracle客户端,部分参数在旧版本中可能未支持。

内容的提问来源于stack exchange,提问作者ashutosh5111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:30:07