前言
在与数据库进行交互时,通常都会使用数据源去帮我们管理数据库连接池。
常用的数据库连接池:
- Druid
- tomcat-jdbc
- DBCP
- C3P0
…
各个连接池的性能对比,可以看 druid 的 github 地址:
https://github.com/alibaba/druid/wiki/各种连接池性能对比测试
本文主要介绍如何使用 druid 数据库连接池,并对 sql 进行监控。
示例
本文使用 springboot 整合 druid 数据源
- pom.xml 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.2</version>
</dependency>
- application.properties
spring.datasource.druid.url=jdbc:mysql://localhost:3306/data_base?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.druid.username=admin
spring.datasource.druid.password=123456
spring.datasource.druid.filters=stat,wall
- 编写配置类,配置 druid 数据源
@Configuration
public class DruidConfiguration {
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Bean
public DataSource dataSource() {
return new DruidDataSource();
}
/**
* druid 数据源状态监控
*
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet() {
// 创建servlet注册实体
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
// 设置ip白名单
servletRegistrationBean.addInitParameter("allow", "");
// 设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
// servletRegistrationBean.addInitParameter("deny", "****");
// 设置控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
/**
* druid 过滤器
*/
@Bean
public FilterRegistrationBean statFilter() {
// 创建过滤器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
// 设置过滤器过滤路径
filterRegistrationBean.addUrlPatterns("/*");
// 忽略过滤的形式
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
然后访问:http://localhost:8080/druid/sql.html
如图所示,就可以实现对 sql 的监控
4. 如果我们想对 Spring 的方法进行监控:
配置 druid-bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置_Druid和Spring关联监控配置 -->
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
<!-- 方法名正则匹配拦截配置 -->
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.beng.demo.dao.*</value>
</list>
</property>
</bean>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
</aop:config>
</beans>
Application 启动类:
@SpringBootApplication(exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class })
@ImportResource({ "classpath:druid-bean.xml" })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
关于 druid 具体的细节以及源码,可以去其 github 地址去看:
https://github.com/alibaba/druid