当前位置: 代码网 > it编程>编程语言>Java > SpringBoot整合Druid实现SQL监控和数据库密码加密

SpringBoot整合Druid实现SQL监控和数据库密码加密

2024年07月05日 Java 我要评论
1 引言1.1 简介druid连接池是阿里巴巴开源的数据库连接池项目。druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防sql注入,内置loging能诊断hack应用行

1 引言

1.1 简介

druid连接池是阿里巴巴开源的数据库连接池项目。druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防sql注入,内置loging能诊断hack应用行为。除了提供基本的数据源功能外,还具备以下优势:

  • 性能优越:druid连接池的性能表现优于其他常见连接池,如c3p0和dbcp。
  • 监控功能强大:druid内置了丰富的监控功能,可以实时查看sql执行情况、连接池状态等。
  • 稳定性高:druid在高并发环境下表现稳定,能够有效避免连接泄漏等问题。
  • 扩展性好:druid支持多种数据库,且配置灵活,易于集成和扩展。

1.2 druid的功能

高效的数据库连接池管理

  • 高性能:在并发环境下表现优越,处理大量数据库连接请求。
  • 稳定性:在高并发和高负载情况下保持稳定,避免连接泄漏。
  • 易用性:配置简单,快速集成到java应用中。

丰富的监控功能

  • 连接池监控:实时监控连接池状态,如连接数、空闲连接数等。
  • sql监控:记录sql执行情况,统计执行时间、次数等。
  • uri监控:监控各uri的访问情况,统计请求次数和响应时间。
  • 防火墙功能:防止sql注入攻击,提升系统安全性。

便捷的配置和扩展

  • 多数据库支持:支持mysql、oracle、postgresql等多种数据库。
  • 灵活配置:提供丰富的配置选项,灵活调整。
  • 插件机制:支持插件扩展功能,如statwalllog4j等。

sql执行日志和统计分析

  • sql执行日志:记录sql执行时间、次数、影响行数等。
  • 统计分析:提供sql执行统计分析,帮助优化sql性能。
  • 慢sql检测:自动检测慢sql,提供详细执行信息,便于调优。

提高系统安全性

  • sql防火墙:配置防火墙规则,拦截非法sql请求,防止sql注入。
  • 黑白名单机制:配置ip黑白名单,限制特定ip访问权限。

1.3 竞品对比

功能类别功能druidhikaricpdbcptomcat-jdbcc3p0
性能pscache
lru
slb负载均衡支持
稳定性exceptionsorter
扩展扩展filterjdbcintercepter
监控监控方式jmx/log/httpjmx/metricsjmxjmxjmx
支持sql级监控
spring/web关联监控
诊断支持logfilter
连接泄露诊断logabandoned
安全sql防注入
支持配置加密

2 准备工作

2.1 项目环境

  • jdk版本:jdk 17
  • spring boot版本:spring boot 3.2.2
  • mysql版本:8.0.37
  • 构建工具:maven

3 集成druid

3.1 添加依赖

这里的druid版本必须要选择1.2.20及以上版本,否则无法运行。

还有一点,druid的版本要与mysql-connector-java的版本相匹配,可以去下面的网站看:

maven repository: com.alibaba » druid » 1.2.20 (mvnrepository.com)

        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>druid-spring-boot-3-starter</artifactid>
            <version>1.2.20</version>
        </dependency>
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>8.0.32</version>
        </dependency>

3.2 配置druid

相关配置的详细信息可见:druiddatasource配置属性列表 · alibaba/druid wiki (github.com)

spring:
  application:
    name: server
  profiles:
    active: dev # 激活dev配置文件
  datasource:
    url: jdbc:mysql://${voyager.db.host}:3306/study_db?useunicode=true&characterencoding=utf-8&autoreconnect=true&servertimezone=asia/shanghai
    driver-class-name: com.mysql.cj.jdbc.driver
    username: root
    password: ${voyager.db.pw}
    # druid 相关参数配置
    druid:
      # 初始化连接大小
      initial-size: 5
      # 最小连接池数量
      min-idle: 5
      # 最大连接池数量
      max-active: 20
      # 获取连接时最大等待时间,单位毫秒
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      # 测试连接
      validation-query: select 1 from dual
      # 配置监控统计用的filters,过滤掉静态文件
      web-stat-filter:
        # 启用web统计过滤器
        enabled: true
        # 过滤匹配规则
        url-pattern: /*
        # 过滤忽略的格式
        exclusions: /druid/*,*.js,*.css,*.gif,*.jpg,*.bmp,*.png,*.ico
      # 配置可视化控制台页面
      stat-view-servlet:
        enabled: true
        # 访问druid监控页面的地址,首页默认是 /druid/index.html
        url-pattern: /druid/*
        # 禁用重置按钮
        reset-enable: true
        # 登录用户名
        login-username: root
        # 登录密码
        login-password: 123456
      # 通过别名的方式配置扩展插件  常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall 防御sql注入的filter:wall
      filter:
        stat:
          enabled: true
          # 是否开启慢sql
          log-slow-sql: true
          # 是否开启sql合并
          merge-sql: true
          # 慢sql的时间标准 单位:毫秒
          slow-sql-millis: 1000

3.3 编写测试类测试

注意:不要使用lombok的@requiredargsconstructor注解,junit5好像无法自动装配。

@springboottest
class smartapplicationtest {
    
    @autowired
    private datasource datasource ;

    @test
    void contextloads() {
        system.out.println(datasource.getclass());
        druiddatasource druiddatasource = (druiddatasource) datasource;
        system.out.println("druiddatasource.geturl() = " + druiddatasource.geturl());
        system.out.println("druiddatasource.getusername() = " + druiddatasource.getusername());
        system.out.println("druiddatasource.getinitialsize() = " + druiddatasource.getinitialsize());
        system.out.println("druiddatasource.getmaxactive() = " + druiddatasource.getmaxactive());
    }
  
}

运行测试:

image-20240624182524748

可以看到配置类的相关配置已经生效。

3.4 访问控制台

启动自己项目中的springbootapplication类后访问http://localhost:8084/druid/login.html(改为自己服务的端口),输入账号密码后即可进入:

image-20240624183006312

3.5 测试sql监控

测试接口

@requestmapping("/user")
@restcontroller
@requiredargsconstructor
public class userinfocontroller {

    private final userinfoservice userinfoservice;

    @getmapping("/test")
    public result<userinfo> login() {
        return result.success(userinfoservice.getbyid(1));
    }
    
}

进行测试

image-20240624183953241

3.6 数据库密码加密

3.6.1 执行命令加密数据库密码

官方教程wiki文档:使用configfilter · alibaba/druid wiki (github.com)

在命令行中执行如下命令:

java -cp d:\develop\maven\mvnrespo\com\alibaba\druid\1.2.20\druid-1.2.20.jar com.alibaba.druid.filter.config.configtools your_password

输出

privatekey:miibvgibadanbgkqhkig9w0baqefaascauawgge8ageaakea6+4avfnqkp+o7bu5ynxwoozjv3no4afv558htpdoxs6egd0hp7rzzhgpokmplq1bba5visht+addaxxp6svtmqidaqabakaeqt4fbo4slctrducmanldtilax/i87oqsonog5m2js0jnsbzuaxdv7/yegetmkuiesbzh7pvvg8fv531/fyozaiea+poke+qwvbufgyeugr6igvnt4yeowkc3buoatscsn98ciqdynbxc8yngdnwz62qpx+onpqcel6g8no9vkc+etas87wihakrouxzl38pqfqv/wlz5zgd0ys9ga360ik8zbomheko/aieases3iuvzqnyxfl3x9tm2gzt1fksx9wx+12bbjcvd7aeciqcd3tv9s+agrhqoncuasdnluvrl/b/womjrlqaovjlqgg==
publickey:mfwwdqyjkozihvcnaqebbqadswawsajbaovugrxz0cj/ju27uwj8vqdmy7956oghveefb0zw6f7ohbg9bz+0c84rjzipqs0nqwwob4kobfmg3wsv6ekr7tecaweaaq==
password:pnak4yui0+2ft6jsokbsgnpl+a033rdlhfw+l0np1o+hdrrco9vkcuiixviemywugphzufxb2fpe0ymsguurww==

3.6.2 配置参数

spring:
  datasource:
    url: jdbc:mysql://${voyager.db.host}:3306/study_db?useunicode=true&characterencoding=utf-8&autoreconnect=true&servertimezone=asia/shanghai
    driver-class-name: com.mysql.cj.jdbc.driver
    username: root
    password: password  # 修改为控制台输出的password
    #druid数据源配置
    druid:
      # druid数据源的公钥
      public-key: publickey # 修改为控制台输出的publickey
      filter:
        # 启用druid的过滤器配置
        config: 
          enabled: true
      connect-properties:
        # 启用druid的连接属性解密功能
        config.decrypt: true
        config.decrypt.key: publickey # 控制台输出的publickey

3.6.3 测试

启动启动类,请求测试接口:

image-20240624211333064

4 总结

在这篇文章中,我们详细介绍了如何在spring boot项目中集成druid数据源,并实现sql监控和数据库密码加密等功能,druid还有许多有用的功能,这里就不过多展示了,希望本文对大家有所帮助。

以上就是springboot整合druid实现sql监控和数据库密码加密的详细内容,更多关于springboot sql监控和密码加密的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com