Spring boot2.0更换druid连接池

Spring boot1.0版本使用的是tomcat连接池,Spring boot2.0使用的是HikariCP连接池,号称性能最优。druid是阿里开源的连接池,性能比较全面。下面说一下怎么在Spring boot配置druid连接池。

配置依赖

        
            com.alibaba
            druid
            1.1.9
        

更改配置文件

修改application.properties配置文件,加入下面属性,我测试用的是pg数据库

#postgresql数据库配置
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select version()
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
#spring.datasource.filters=stat,wall,log4j
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.useGlobalDataSourceStat=true
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

增加配置文件

在启动类同级文件夹下创建config文件夹,新建DruidConfig类

package com.data.test.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfig {
  /**
   * 将自定义的 Druid 数据源添加到容器中,不再让 Spring Boot 自动创建
   * 这样做的目的是:绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource
   * 从而让它们生效
   * @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中 前缀为 spring.datasource
   * 的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
   *
   * @return
   */
  @ConfigurationProperties(prefix = "spring.datasource")
  @Bean
  public DataSource druidDataSource() {
    return new DruidDataSource();
  }
}

到这里就已经配置完,并且生效了。

测试

测试代码

package com.data.test;

import com.alibaba.druid.pool.DruidDataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.SQLException;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTest {

  /**
   * Spring Boot 默认已经配置好了数据源,程序员可以直接 DI 注入然后使用即可
   */
  @Resource
  DataSource dataSource;

  @Test
  public void contextLoads() throws SQLException {
    System.out.println("数据源>>>>>>" + dataSource.getClass());
    Connection connection = dataSource.getConnection();

    System.out.println("连接>>>>>>>>>" + connection);
    System.out.println("连接地址>>>>>" + connection.getMetaData().getURL());

    DruidDataSource druidDataSource = (DruidDataSource) dataSource;
    System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());
    System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());
    connection.close();
  }

}

测试结果

Spring boot2.0更换druid连接池_第1张图片

你可能感兴趣的:(Spring,boot)