讲师中心 微信公众号
AI工具推荐 视频效率加速

Spring Boot 2.x怎么整合Oracle与Druid连接池并监控SQL?

胖杰君_3978

胖杰君_3978

发布时间:2026-10-28 10:52:37

|

979人浏览过

|

来源于php中文网

原创

Oracle+Druid监控核心是驱动、Filter与解析器三者匹配:必须用ojdbc8.jar(如21.10.0.0)、druid-starter≥1.2.23、禁用WallFilter、手动注册WebStatFilter和StatViewServlet,并配置sql-parser: oracle。

spring boot 2.x怎么整合oracle与druid连接池并监控sql?

Spring Boot 2.x 整合 Oracle + Druid 并开启 SQL 监控,核心难点不在“连得上”,而在“看得清”——Oracle 的 JDBC 驱动版本、Druid 的 SQL 解析能力、监控路径的 Filter 注册方式,三者稍有不匹配,/druid 页面就可能空白、SQL 不统计、慢查询漏报。

Oracle JDBC 驱动必须用 ojdbc8.jar,且不能混用旧版

Spring Boot 2.x 默认基于 JDK 8+,而 Oracle 官方明确要求:JDK 8 必须配 ojdbc8.jar(对应 Oracle 12cR2+),用 ojdbc6.jar 或 ojdbc7.jar 会导致 Druid 的 StatFilter 无法正确解析执行计划、ResultSet 元数据读取异常,最终表现为 SQL 列表为空或执行时间恒为 0。

  • 确认 Maven 依赖中只存在一个 Oracle 驱动,且版本为 12.2.0.1 或更高(如 21.10.0.0):
    <dependency>
      <groupId>com.oracle.database.jdbc</groupId>
      <artifactId>ojdbc8</artifactId>
      <version>21.10.0.0</version>
    </dependency>
  • 删掉项目里所有 ojdbc6.jar、ojdbc7.jar、classes12.jar 等历史残留;
  • 如果用的是 Oracle 19c/21c,注意驱动类名仍是 oracle.jdbc.OracleDriver,不是 oracle.jdbc.driver.OracleDriver(后者已废弃)。

druid-spring-boot-starter 的 version 必须 ≥ 1.1.10

早期 druid-spring-boot-starter 1.1.9 对 Oracle 支持不完整:它默认启用 WallFilter,但该 Filter 在 Oracle 场景下会误判部分合法语法(如 SELECT * FROM DUAL、ROWNUM 子句)为风险 SQL,直接拦截或不记录;同时其 StatFilter 对 Oracle 的绑定变量识别率低,导致同一条 SQL 被拆成多条“不同 SQL”统计。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 强制升级 starter 版本:
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.2.23</version>
    </dependency>
  • 在 application.yml 中显式关闭 WallFilter(除非你真需要 SQL 防注入,否则它对 Oracle 反而添乱):
    spring:
      datasource:
        druid:
          filter:
            wall:
              enabled: false
  • 确保 StatFilter 是唯一启用的统计 Filter:
          filter:
            stat:
              enabled: true
              db-type: oracle

/druid 页面 404 或无数据?检查 WebStatFilter 是否注册成功

Druid 的监控页面不是自动暴露的——它依赖 WebStatFilter 拦截 HTTP 请求并采集 URI、Session、SQL 关联关系。Spring Boot 2.x 的自动配置在某些场景下(比如用了 Spring Security、自定义了 ServletWebServerFactory)会跳过该 Filter 注册,导致监控页打不开,或打开后全是 0。

  • 手动注册 WebStatFilter 和 StatViewServlet(推荐,可控性强):
    @Configuration
    public class DruidConfig {
      @Bean
      public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        bean.addUrlPatterns("/*");
        bean.addInitParameter("exclusions", "/druid/*,*.js,*.css,/images/*,/fonts/*");
        return bean;
      }
    <p>@Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
    ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
    bean.addInitParameter("loginUsername", "admin");
    bean.addInitParameter("loginPassword", "admin");
    bean.addInitParameter("allow", "127.0.0.1,192.168.1.100"); // 生产务必限制 IP
    return bean;
    }
    }
  • 确认你的 Oracle 查询确实走的是 Druid 数据源:加一行日志验证 dataSource.getClass().getName() 输出是否为 com.alibaba.druid.pool.DruidDataSource;
  • 访问 /druid/sql.html 后,点“刷新”再等 5–10 秒——Druid 默认每 60 秒聚合一次 SQL 统计,首次加载可能为空。

Oracle 特有 SQL 无法被识别?调整 sql-parser 配置

Druid 内置的 SQL 解析器对 Oracle 的 CONNECT BY、MERGE INTO、带 hint 的语句(如 /*+ INDEX(t idx_name) */)支持有限。若发现某类 SQL 总是显示为“OTHER”或归类错误,需主动指定 parser:

  • 在 application.yml 中加入:
    spring:
      datasource:
        druid:
          connection-properties: druid.stat.mergeSql=true;druid.stat.useWall=false
          # 强制使用 Oracle 解析器(Druid 1.2.16+ 支持)
          sql-parser: oracle
  • 如果仍无效,可临时关闭 SQL 合并(避免因解析失败丢数据):
          filter:
            stat:
              merge-sql: false
  • 慢 SQL 阈值建议设为 1000ms 起步:
              slow-sql-millis: 1000
    Oracle 多数 OLTP 查询应在毫秒级,超过 1 秒基本可定位为慢。

真正卡住人的往往不是配置本身,而是 Oracle 驱动和 Druid 版本之间那层隐性兼容边界——它不报错,只沉默地不统计、不归类、不告警。上线前务必用一条带 ROWNUM 和绑定变量的简单查询,手动触发几次,再盯紧 /druid/sql.html 是否实时出现记录。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

1041

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

3073

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

3090

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

1749

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2373

2023.09.19

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

3249

2023.09.19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4689

2023.11.02

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

257

2023.11.08

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn