springboot使用druid连接池

starlin 5,166 2021-06-15

今天在测试druid数据库连接池公平锁对性能的影响的时候,发现了一个尴尬的问题,我们druid配置参数完全没起作用啊

居然是jdbc,

后来我写了个单元测试证实了,虽然数据库连接池类型是druid,但是druid的参数无效啊,代码如下:

@Test
public void contextLoads() throws SQLException {
    //默认数据源
    System.out.println("默认数据源" + dataSource.getClass());
    //获得连接
    Connection connection = dataSource.getConnection();
    DruidDataSource druidDataSource = (DruidDataSource) dataSource;
    System.out.println("druid 数据源最大连接数:" + druidDataSource.getMaxActive());
    System.out.println("druid 数据源初始化连接数:" + druidDataSource.getInitialSize());
    System.out.println("druid 数据源初始化maxWait:" + druidDataSource.getMaxWait());
    System.out.println("druid 数据源初始化minIdle:" + druidDataSource.getMinIdle());
    connection.close();
}

输出结果:

默认数据源class com.alibaba.druid.pool.DruidDataSource$$EnhancerBySpringCGLIB$$211f72e7
com.mysql.cj.jdbc.ConnectionImpl@6b4b6cd6
druid 数据源最大连接数:8
druid 数据源初始化连接数:0
druid 数据源初始化maxWait:-1
druid 数据源初始化minIdle:0

然后看了pom文件,druid引入jar包如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>

继续,在代码中没发现druid的配置类,一口老血差点喷在屏幕上

解决方案,有2中,如下:

  1. 增加配置类,代码如下:
/**
 * Created by starlin
 * on 2021/06/15 16:17.
 */
@Configuration
public class DruidConfig {
    private static final Logger log = org.slf4j.LoggerFactory.getLogger(DruidConfig.class);

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource createDataSource() {
        return new DruidDataSource();
    }
}

配置发现既然没用,看了下yml文件,发现druid中的配置属性前面还有druid前缀,导致属性装配失败,修改后如下:

再次调用查询数据的单元测试,截图如下

获取数据库连接池参数的单元测试,结果如下:

默认数据源class com.alibaba.druid.pool.DruidDataSource$$EnhancerBySpringCGLIB$$5d4b2b3f
druid 数据源最大连接数:20
druid 数据源初始化连接数:5
druid 数据源初始化maxWait:60000
druid 数据源初始化minIdle:5
  1. 将druid换成starter启动类,就不需要上面的配置类
    对应的pom如下:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>

对应的yml文件还原即可,如下截图:

测试结果如下:

默认数据源class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper$$EnhancerBySpringCGLIB$$639ba436
druid 数据源最大连接数:20
druid 数据源初始化连接数:5
druid 数据源初始化maxWait:60000
druid 数据源初始化minIdle:5

# springboot