Druid和HikariCP
来自于《Spring Boot微服务项目实战》该书所记录的笔记。
一、集成Druid
Druid是阿里巴巴开源项目中的数据库连接池,在监控和性能方面有明显优势,它包括三个部分:
- DruidDriver:代理Driver,提供Filter-Chain模式的插件体系。
- DruidDataSource:高效可管理的数据库连接池。
- SQLParser:所支持的数据库。
1、引入依赖
在pom文件中添加如下代码:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
2、druid配置
在application.properties中添加如下代码:
### MySQL连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
### 用户名
spring.datasource.username=root
### 密码
spring.datasource.password=zrb19990210..
### 驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 连接池指定 springboot2.x版本默认使用HikariCP 此处要替换成Druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
创建src\main\java\com\example\demo\filter\DruidConfiguration.java,代码如下:
package com.example.demo.filter;
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.jdbc.DataSourceBuilder;
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 org.springframework.context.annotation.Primary;
import javax.activation.DataSource;
import java.sql.SQLException;
@Configuration//在项目启动时可以初始化配置
public class DruidConfiguration {
@Bean
public ServletRegistrationBean staViewServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
//白名单为空允许任何ip访问
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//ip黑名单(存在共同时,deny优先于allow):如果满足deny的即提示:Sorry you are not permitted...
servletRegistrationBean.addInitParameter("deny","127.0.0.2");
//登录查看信息的账号密码
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","druid");
//是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable","true");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpn,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
//配置数据库的基本连接信息
@Primary
@ConfigurationProperties(prefix = "spring.datasource")//在application.properties中读取配置信息注入到DruidDataSource里
public DataSource dataSource(){
DruidDataSource druidDataSource = DataSourceBuilder.create().type(DruidDataSource.class).build();
druidDataSource.setInitialSize(3);//初始化物理连接的数量
try {
druidDataSource.addFilters("stat,wall");//stat是sql监控,wall是防火墙(如果不添加则监控无效),不能添加log4j不然会出错
} catch (SQLException e) {
e.printStackTrace();
}
return (DataSource) druidDataSource;
}
}
访问http://127.0.0.1:8080/druid/login.html
二、HikariCP连接池
HikariCP 是一个高性能的 JDBC 连接池组件,Spring Boot默认使用。