关于springboot配置druid数据源不生效问题(踩坑记)

网友投稿 1766 2022-12-05

关于springboot配置druid数据源不生效问题(踩坑记)

pom文件

如果你的springboot项目要用到druid,那么这三个依赖必不可少:

com.alibaba

druid-spring-boot-starter

1.1.10

com.alibaba

druid

1.1.12

log4j

log4j

1.2.17

我踩到的第一个坑就踩到这了。当时我没有引入druid-spring-bootPOfMtF-starter这个依赖,所以在测试的时候就出了问题,最后还是查找了资料才解决。下面踩的坑就更加POfMtF离谱了。

踩坑经历与解决方案

起http://初,我的yml配置文件是这样写的:

spring:

datasource:

username: root

password: bugeinikan

url: jdbc:mysql://localhost:3306/2021summer?useUnicode=true&characterEncoding=utf-8

driver-class-name: com.mysql.cj.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource

druid:

initialSize: 5

minIdle: 5

maxActive: 20

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

minEvictableIdleTimeMillis: 300000

validationQuery: SELECT 1 FROM DUAL

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

这看起来毫无毛病,而且idea也并没有报错。

然后我们把数据源添加到容器中,DruidConfig类代码如下:

@Configuration

public class DruidConfig {

@ConfigurationProperties(prefix = "spring.datasource")

@Bean

public DataSource druidDataSource() {

return new DruidDataSource();

}

}

编写测试类,测试程类代码如下:

@SpringBootTest

class ApplicationTests {

@Autowired

DataSource dataSource;

@Test

void contextLoads() throws SQLException {

System.out.println(dataSource.getClass());

//获得连接

Connection connection = dataSource.getConnection();

System.out.println(connection);

DruidDataSource druidDataSource = (DruidDataSource) dataSource;

System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());

System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());

//关闭连接

connection.close();

}

}

输出结果:

class com.alibaba.druid.pool.DruidDataSource

2021-09-24 16:12:52.689 INFO 4408 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited

com.mysql.cj.jdbc.ConnectionImpl@7b96de8d

druidDataSource 数据源最大连接数:8

druidDataSource 数据源初始化连接数:0

程序看上去毫无问题,可是输出的结果却与自己设置的不同。我们再来打断点具体看一下:

可以看到,在yml文件中,对数据源的username、password、url和driverClass配置都是生效的。

再往下看:

yml文件中,设置的maxActive和maxWait明明是20和60000,在这里显示的却是默认的属性,这说明我们在yml文件中写的spring.datasource.druid配置并没有生效,抱着试一试的态度,我对yml文件进行了如下的修改:

spring:

datasource:

username: root

password: bugeinikan

url: jdbc:mysql://localhost:3306/2021summer?useUnicode=true&characterEncoding=utf-8

driver-class-name: com.mysql.cj.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource

initialSize: 5

minIdle: 5

maxActive: 20

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

minEvictableIdleTimeMillis: 300000

validationQuery: SELECT 1 FROM DUAL

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

这时,idea就给我报出无法解析,如图:

不管它了,死马也要当活马医,我们启动测试程序,运行结果:

class com.alibaba.druid.pool.DruidDataSource

2021-09-24 16:19:45.095 INFO 11428 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited

com.mysql.cj.jdbc.ConnectionImpl@67e25252

druidDataSource 数据源最大连接数:20

druidDataSource 数据源初始化连接数:5

这次输出的居然和我们配置的一样,在后面的断点测试中,各项属性也都和配置的一样。

不得不说,这次真是被idea坑惨了,刚开始以为是注入失败的问题,然后还查了很多资料。我的springboot版本是2.5.4,希望这个文章可以帮助那些和我一样踩坑的人。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot中rabbitmq实现消息可靠性机制详解
下一篇:Java使用Unsafe类的示例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~