一:数据库连接池是什么呢?
数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中连接进行申请、使用、释放。
数据库连接是一件费事的操作,连接池可以使得多个操作共享一个连接,数据库连接池就是为数据库建立一个缓冲区。
当需要建立数据库连接时,只需要从缓冲区中取出一个,使用完毕后再放回去;使用数据库连接池可以提高对数据库连接资源的管理,数据库连接池负责分配、管理和释放数据库连接,允许程序重复使用一个现有的数据库连接,而不是重新建立一个;可以通过设定连接池最大连接数来防止系统无尽的与数据库连接
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:集成成功表现如下:
如上图所示,数据源已经更换成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());
}
访问这个方法,控制台输出:
6:druid数据源监控
Druid提供了具有监控的功能,提供了一个web界面供用户查看,我们得设置Druid后台管理页面,如登录账号、密码等
项目启动成功之后,浏览器访问:http://localhost:7001/druid/index.html
我在上方的配置文件中已经配置了监控页面的用户名和密码,这里直接输入即可。
这个监控页面还是非常好用的。可以非常直观的看到我们数据库的运行状态,以及SQL的运行时间,数据库并发数等信息。
以上大概就是Springboot集成druid的基本流程。
有好的建议,请在下方输入你的评论。