SpringBoot(二十)SpringBoot集成druid

77 阅读4分钟

一:数据库连接池是什么呢?

数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中连接进行申请、使用、释放。

 

数据库连接是一件费事的操作,连接池可以使得多个操作共享一个连接,数据库连接池就是为数据库建立一个缓冲区。

 

当需要建立数据库连接时,只需要从缓冲区中取出一个,使用完毕后再放回去;使用数据库连接池可以提高对数据库连接资源的管理,数据库连接池负责分配、管理和释放数据库连接,允许程序重复使用一个现有的数据库连接,而不是重新建立一个;可以通过设定连接池最大连接数来防止系统无尽的与数据库连接

 

Druid是最好的数据库连接池~

 

二:springboot集成druid

1:添加POM依赖

这里需要注意一下,我项目的springboot版本是2.6,因此我添加的依赖如下所示:

<!-- springboot框架连接mybatis jar -->
<!--mybatis,引入了 SpringBoot的 JDBC 模块,所以,默认是使用 hikari 作为数据源-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
    <exclusions>
        <!-- 排除默认的 HikariCP 数据源 -->
        <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- druid数据库连接池       -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
</dependency>
<!-- java连接数据库jar -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

 

但是,如果你的springboot版本是3.x,那么对应的druid版本就因该是1.2.19以上

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.21</version>
</dependency>

 

2:配置druid参数

spring:
  # 数据库链接
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://111111111111:3306/xxxxx?characterEncoding=utf8&useSSL=false
    username: root
    password: 1111111111
    #druid数据源配置
druid:
  username: root # mysql账号
  password: 1111111111111 # mysql 密码
  driver-class-name: com.mysql.jdbc.Driver # 驱动包名
  url: jdbc:mysql://111111111111:3306/xxxxxxxxx?characterEncoding=utf8&useSSL=false # 连接地址
  # 初始化建立物理连接个数
  initial-size: 5
  # 最小连接数
  min-idle: 5
  # 最大连接数
  max-active: 10
  # 最大等待时间,单位毫秒
  max-wait: 6000
  # 检测连接是否有效
  time-between-eviction-runs-millis: 60000
  # 连接在池中的最小生存时间
  min-evictable-idle-time-millis: 300000
  # 检测连接是否有效的SQL 要求是一个查询语句
  validation-query: SELECT 1 FROM DUAL
  # 这些参数控制何时检测连接的有效性。
  test-while-idle: true
  test-on-borrow: false
  test-on-return: false
  # 是否缓存预编译的sql语句
  pool-prepared-statements: true
  # 配置监控统计拦截的filters,stat:监控统计,log4j:日志记录,wall:防御sql注入
  filters: stat,wall,log4j
  # 每个连接可缓存的预编译语句的最大数量。
  max-pool-prepared-statement-per-connection-size: 20 #
  # 是否启用全局的数据统计功能。
  use-global-data-source-stat: true
  # 连接属性,这里设置了合并SQL和慢查询的阈值(毫秒)。
  connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  # 配置可视化控制台页面
  stat-view-servlet:
    enabled: true
    # 访问druid监控页面的地址
    url-pattern: /druid/*
    #        IP 白名单 没有配置或者为空则允许所有访问
    allow:
    # IP黑名单,若白名单也存在则优先使用
    deny:
    # 禁用重置按钮
    reset-enable: true
    # 登录所用的用户名与密码
    login-username: admin
    login-password: 123456
  #配置过滤器,过滤掉静态文件
  web-stat-filter:
    enabled: true
    url-pattern: /*
    exclusions: /druid/*,*.js,*.css,*.gif,*.jpg,*.bmp,*.png,*.ico

 

3:编写druid配置类(绑定全局配置文件的参数)

package com.springbootblog.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * druid配置类
 */
//@Configuration
public class DruidAdConfig
{
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DataSource dataSource() {
        return new DruidDataSource();
    }

    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // 可以添加初始化参数来配置白名单、黑名单、登录用户名和密码等
        servletRegistrationBean.addInitParameter("loginUsername""your-username");
        servletRegistrationBean.addInitParameter("loginPassword""your-password");
        // 是否允许清空统计数据
        servletRegistrationBean.addInitParameter("resetEnable""false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions""*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

 

4:运行报警告

log4j:WARN No appenders could be found for logger (druid.sql.Connection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

 

解决办法:创建log4j.properties,代码如下:

log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

5:集成成功表现如下:

1.jpg

如上图所示,数据源已经更换成DruidDataSource

 

也可以写代码测试:

@Autowired
private DataSource dataSource;
@GetMapping("index/testsss")
public void testsss()
{
    DruidDataSource druidDataSource = (DruidDataSource)dataSource;
    System.out.println("最大连接数:" + druidDataSource.getMaxActive());
    System.out.println("初始化连接数:" + druidDataSource.getInitialSize());
}

访问这个方法,控制台输出:

2.jpg

 

6:druid数据源监控

Druid提供了具有监控的功能,提供了一个web界面供用户查看,我们得设置Druid后台管理页面,如登录账号、密码等

项目启动成功之后,浏览器访问:http://localhost:7001/druid/index.html

我在上方的配置文件中已经配置了监控页面的用户名和密码,这里直接输入即可。

3.jpg

这个监控页面还是非常好用的。可以非常直观的看到我们数据库的运行状态,以及SQL的运行时间,数据库并发数等信息。

 

以上大概就是Springboot集成druid的基本流程。

 

有好的建议,请在下方输入你的评论。