Druid简介
Druid是是阿里巴巴开源的数据库连接池项目。
当然Druid不仅仅是一个连接池,还有很多其他的功能。
Druid的使用
添加druid的依赖、数据库驱动
因为我们使用的是spring boot ,直接就添加 druid-spring-boot-starter 就可以了
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<!-- Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
在sources下yml里面添加Druid有关内容
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
# 1.配置生成的password
password: 123456
# Druid数据源配置
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testWhileIdle: true
#配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
testOnBorrow: false
#配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
testOnReturn: false
#打开PsCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
#合并多个DruidDatasource的监控数据
useGlobalDataSourceStat: true
#通过connectProperties属性来打开mergesql功能罗慢sQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;
使用的部分
@Repository
public class Xxx {
@Resource
private DruidDataSource dataSource;
public void xxx() throws SQLException {
//获取连接
Connection connection = dataSource.getConnection();
//Statement接口
Statement statement = connection.createStatement();
String sql1 = "insert into tb_student (name,age) values ('chy',20)";
statement.executeUpdate(sql1);
//PreparedStatement接口
String sql2 = "insert into tb_student (name,age) values ('chy',22)";
PreparedStatement preparedStatement = connection.prepareStatement(sql2);
preparedStatement.execute();
//关闭连接
connection.close();
}
}
在config中导入
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.util.HashMap;
//声明这是一个配置类
@Configuration
public class DruidConfig {
//将刚才配置的yml文件和配置类绑定
@ConfigurationProperties(prefix = "spring.datasource")
//注入到Bean中,交给spring进行管理
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控功能
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后台需要有人登录,账号密码配置
HashMap<String, String> initParameters = new HashMap<>();
//加配置
//注意:参数名字是固定的,为loginUsername 和loginPassword
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","123456");
//允许谁能访问
initParameters.put("allow","");//value参数为空,所有人能访问
//禁止谁能访问
// initParameters.put("my","");//value为ip地址,配置了为拒绝访问
bean.setInitParameters(initParameters);//设置初始化参数
return bean;
}
}
这样就可以使用druid的监控功能