开发者社区> 问答> 正文

如何把druid监控到的信息存储到数据库中

druid监控到的数据现在是存储到内存中的,请问如何把这些信息(比如sql统计,慢sql等信息)存储到指定的数据库中呢?

原提问者GitHub用户diaowenyang

展开
收起
山海行 2023-07-05 19:52:21 265 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    下面是实现将监控数据存储到数据库的步骤:

    创建相应的数据库表。Druid提供了一个默认的表结构,您可以在Druid的jar包中找到 druid-xxx.jar!/META-INF/druid.sql 文件,其中包含了建表语句。您可以使用该文件中的SQL语句创建表,或者自定义表结构。

    配置Druid连接池。在应用程序的配置文件中,配置Druid连接池的 StatFilter 和 StatViewServlet,并设置 StatFilter 的 logSlowSql 属性为 true,表示开启慢SQL日志记录。

    配置Druid连接池的 WallFilter,并设置其 config 属性为 wall-config,表示使用Wall SQL防火墙来防止SQL注入攻击。

    在应用程序的配置文件中,配置Druid连接池的数据源(DruidDataSource),并设置其 filters 属性为 stat,wall,表示开启Druid连接池的监控和SQL防火墙功能。

    配置Druid连接池的 StatFilter,并设置其 logSlowSql 属性为 true,表示开启慢SQL日志记录。

    在应用程序启动时,调用 DruidDataSourceStatManager#addDataSourceStatListener 方法,注册 DataSourceStatListener 监听器,并实现 DataSourceStatListener 接口中的 onStatEvent 方法,该方法会在监控数据发生变化时被调用。

    在 onStatEvent 方法中,将监控数据保存到数据库中。您可以使用JDBC或ORM框架(如MyBatis、Hibernate等)将监控数据保存到数据库中。

    2023-07-30 15:06:39
    赞同 展开评论 打赏
  • Druid支持将监控到的数据存储到指定的数据库中,可以使用Druid的数据源和数据存储组件来实现。具体来说,可以使用Druid的数据源组件来连接数据库,并使用Druid的数据存储组件将监控到的数据存储到数据库中。Druid支持多种数据源和数据存储组件,可以根据实际需求选择合适的组件。

    2023-07-11 09:55:01
    赞同 展开评论 打赏
  • 第一步: 继承com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl并重写public void log(DruidDataSourceStatValue statValue)方法。 注意必须调用父类的log(DruidDataSourceStatValue statValue)方法。 他们的原本设计意图是继承com.alibaba.druid.pool.DruidDataSourceStatLoggerAdapter,但这样监控信息会错乱(应该是BUG,我提过,但他们无视了)。

    刚测试了:按照第一步的操作依旧会跟继承DruidDataSourceStatLoggerAdapter一样产生错乱(监控计数被重置,统计信息丢置),这个问题无解。

    第二步: 设置statLogger为你自己写的实现。

    原回答者GitHub用户wiix

    2023-07-06 11:13:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载