druid监控到的数据现在是存储到内存中的,请问如何把这些信息(比如sql统计,慢sql等信息)存储到指定的数据库中呢?
原提问者GitHub用户diaowenyang
下面是实现将监控数据存储到数据库的步骤:
创建相应的数据库表。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等)将监控数据保存到数据库中。
Druid支持将监控到的数据存储到指定的数据库中,可以使用Druid的数据源和数据存储组件来实现。具体来说,可以使用Druid的数据源组件来连接数据库,并使用Druid的数据存储组件将监控到的数据存储到数据库中。Druid支持多种数据源和数据存储组件,可以根据实际需求选择合适的组件。
第一步: 继承com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl并重写public void log(DruidDataSourceStatValue statValue)方法。 注意必须调用父类的log(DruidDataSourceStatValue statValue)方法。 他们的原本设计意图是继承com.alibaba.druid.pool.DruidDataSourceStatLoggerAdapter,但这样监控信息会错乱(应该是BUG,我提过,但他们无视了)。
刚测试了:按照第一步的操作依旧会跟继承DruidDataSourceStatLoggerAdapter一样产生错乱(监控计数被重置,统计信息丢置),这个问题无解。
第二步: 设置statLogger为你自己写的实现。
原回答者GitHub用户wiix
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。