今天在测试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中,如下:
- 增加配置类,代码如下:
/**
* 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
- 将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