SpringBoot 整合Druid数据源

简介

Druid是阿里巴巴开源的数据库连接池,号称是Java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。

优点

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  2. 替换DBCP和C3P0,Druid提供了一个高效、功能强大、可扩展性好的数据库连接池
  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDriver和DruidDataSource都支持PasswordCallback。
  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  5. 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件

引入依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.13-SNSAPSHOT</version>
</dependency>

这里使用的是SpringBoot整合版的Druid,使用这个Druid的好处是SpringBoot帮我们做了集成,不需要我们进行太多的配置,开箱即用。

配置Druid数据源

1、启用Druid数据源

SpringBoot 2.0 以上默认使用的是Hikari数据源,所以要启用Druid数据源,需要手动进行启用,在application.yml文件添加以下配置。

spring:
  datasource:
    username: root   #用户名
    password: 123456  # 密码
    url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8  # 数据库连接串
    driver-class-name: com.mysql.cj.jdbc.Driver  # mysql连接驱动
    type: com.alibaba.druid.pool.DruidDataSource   # 启用Druid数据源  @1
    druid:
      max-active: 20   # 最大连接池数量  @2
      min-idle: 10   # 最小连接池数量  @3

2、测试

启动应用,可以在控制打印中看到是否启用Druid数据源,如下:

com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited

如果在控制台有以上的输出,则表明已成功启用Druid。

配置Druid监控

基于Druid的Filter-Chain扩展机制,Druid提供了3个非常有用的具有监控功能的Filter:
StatFilter 用于统计监控信息
WallFilter 基于SQL语义分析来实现防御SQL注入攻击
LogFilter 用于输出JDBC执行的日志。

1、配置监控信息

在application.yml文件中添加需要进行监控的Filter,值分别为:stat, wall, log4j2,配置如下:

spring:
  datasource:
    username: root   #用户名
    password: 123456  # 密码
    url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8  # 数据库连接串
    driver-class-name: com.mysql.cj.jdbc.Driver  # mysql连接驱动
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      max-active: 20
      min-idle: 10
      filters: stat,wall,log4j2   # 设置监控功能
      web-stat-filter:
        enabled: true
        url-pattern: /*
      stat-view-servlet:
        login-username: admin   # 设置访问druid监控页的账号
        login-password: 123456 # 设置访问druid监控页的密码
        url-pattern: /druid/*  # 设置访问druid监控页的URL
        enabled: true  # 是否开启监控页访问
      use-global-data-source-stat: true  # 合并多个监控数据
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 500   # 慢查询

stat:用于统计监控信息
wall: 基于SQL语义分析来实现防御SQL注入攻击
log4j2: 用于输出JDBC执行的日志。

2、测试

配置完成后,启动应用,访问http://localhost:80/druid/,即可看到以下页面:

SpringBoot 整合Druid数据源

配置详解

配置说明
spring.datasource.druid.initial-size连接池初始数量
spring.datasource.druid.min-idle最小连接池数量
spring.datasource.druid.max-active最大连接池数量
spring.datasource.druid.max-wait获取连接时最大等待时间,单位毫秒
spring.datasource.druid.test-while-idle申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
spring.datasource.druid.time-between-eviction-runs-millis既作为检测的间隔时间又作为testWhileIdel执行的依据
spring.datasource.druid.min-evictable-idle-time-millis销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
spring.datasource.druid.test-on-borrow申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.test-on-return归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.exception-sorter当数据库抛出不可恢复的异常时,抛弃该连接
spring.datasource.druid.pool-prepared-statements是否缓存preparedStatement,mysql5.5+建议开启
spring.datasource.druid.max-pool-prepared-statement-per-connection-size当值大于0时poolPreparedStatements会自动修改为true
spring.datasource.druid.filters配置扩展插件,可选值为:stat, wall
druid.filter.stat.mergeSql打开mergeSql功能
druid.filter.stat.slow-sql-millis慢SQL记录
spring.datasource.druid.use-global-data-source-stat合并多个DruidDataSource的监控数据
spring.datasource.druid.stat-view-servlet.login-username设置访问druid监控页的账号
spring.datasource.druid.stat-view-servlet.login-password设置访问druid监控页的密码

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/429

Previous 2023年3月26日
Next 2023年3月26日

相关推荐

  • Springboot 注解 @Configuration

    作用 @Configuration用于定义配置类,标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的beans。@Configurat…

    springboot 2022年9月2日
    224
  • SpringBoot 分布式Session

    简介 现在随着分布式,微服务架构的日益成熟,越来越多的企业将传统的单体服务改造为微服务或是分布式架构,在分布式中就遇到session管理的问题,微服务架构中一个服务为了实现高可用至…

    springboot 2023年4月30日
    176
  • SpringBoot 全局异常统一处理

    前言 在实际的项目开发过程中,会有大量的异常发生,而我们并不能将异常信息反馈到用户,所以在返回结果的时候需要对异常进行处理,可是如果在每个Controller返回结果都需要进行异常…

    springboot 2023年4月29日
    125
  • SpringBoot 缓存

    简介 缓存主要是为了提高数据的读取速度。 因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大…

    springboot 2023年4月23日
    133
  • SpringBoot 定时器

    spring提供了@Scheduled和@EnableScheduling两个注解用来快速开发定时器,使用很简单 用法: 1、Springboot的启动类中加上@EnableSch…

    springboot 2023年4月23日
    135
  • SpringBoot 整合Memcached

    简介 Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached…

    springboot 2023年4月24日
    242
  • SpringBoot 打包

    SpringBoot 项目部署到服务器常见的方式就是,打包成 jar 包,通过 nohup java -jar 命令去运行项目,这也是官方推荐的一种方式。 导入依赖 打包 设置打包…

    springboot 2023年4月5日
    148
  • SpringBoot 缓存 – Redis

    引入依赖 缓存配置 启用缓存 修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下: 配置缓存类 新建Redis缓存配置类RedisConfig,如下: 添加缓…

    2023年4月23日
    161
  • SpringBoot 依赖注入

    前言 SpringBoot 中通过注解实现依赖注入主要有以下几种: @Autowired注解 @Qualifier注解 @Resource注解 @Primary注解 @Autowi…

    springboot 2024年1月15日
    631
  • SpringBoot 整合Mybatis-Plus

    简介 MyBatis-Plus是一个MyBatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生。 添加依赖 注意:添加Mybatis-Plus即可…

    springboot 2023年3月26日
    131