# SpringBoot-Druid连接池

# 介绍

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

# 步骤

# pom.xml 配置

properties节点环境配置

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<!-- JDK版本 -->
	<java.version>1.8</java.version>
</properties>
1
2
3
4
5
6

dependencies节点添加依赖

<!-- SpringBoot-MySQL-JDBC/druid连接池 依赖 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Druid -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.0.26</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 配置yml文件,datasource源配置

spring: 
  datasource: #主数据源
    type: 'com.alibaba.druid.pool.DruidDataSource'
    driverClassName: 'com.mysql.cj.jdbc.Driver'
    url: 'jdbc:mysql://47.107.91.238:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true'
    username: 'root'
    password: 'xinrenlei78'
    #下面为连接池的补充设置,应用到上面所有数据源中
    #初始化大小,最小,最大
    initialSize: 5
    minIdle: 1
    maxActive: 50
    #配置获取连接等待超时的时间
    maxWait: 60000
    #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    #配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: 'SELECT 1 FROM DUAL'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: false
    #打开PSCache,并且指定每个连接上PSCache的大小
    maxPoolPreparedStatementPerConnectionSize: 20
    #配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: 'stat,wall'
    #通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: 'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000'
    #合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 建立Druid配置类

public @Configuration class DruidConfig {

	
	/**
	 * 注入该DruidDataSource
	 * @return
	 */
    @Bean(destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    /**
     * 注册一个StatViewServlet
     * @return
     */
    @Bean
    public ServletRegistrationBean<StatViewServlet> druidStatViewServlet(){
        //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
        ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>(new StatViewServlet(),"/druid/*");
        
        //白名单:
        servletRegistrationBean.addInitParameter("allow","localhost");
        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny","");
        //登录查看信息的账号密码.
        servletRegistrationBean.addInitParameter("loginUsername","admin");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能够重置数据.
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    /**
     * 注册一个:filterRegistrationBean
     * @return
     */
    @Bean
    public FilterRegistrationBean<WebStatFilter> druidStatFilter(){
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<WebStatFilter>(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 运行项目

运行项目后,直接访问http://localhost/druid

最近更新: 2019/10/17 上午4:20:42