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


Posted in Java/Android onSeptember 25, 2021

pom文件

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

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

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

踩坑经历与解决方案

起初,我的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

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

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

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

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

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就给我报出无法解析,如图:

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

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

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,希望这个文章可以帮助那些和我一样踩坑的人。

到此这篇关于springboot配置druid数据源不生效问题的文章就介绍到这了,更多相关springboot配置druid数据源内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
分析设计模式之模板方法Java实现
Jun 23 Java/Android
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
详解Java实现设计模式之责任链模式
Jun 23 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
解决Swagger2返回map复杂结构不能解析的问题
Jul 02 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java后台生成图片的完整步骤
Aug 04 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
Mybatis 一级缓存和二级缓存原理区别
Sep 23 Java/Android
Java使用Unsafe类的示例详解
Sep 25 #Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 #Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 #Java/Android
spring cloud 配置中心native配置方式
Sep 25 #Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 #Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 #Java/Android
java如何实现socket连接方法封装
Sep 25 #Java/Android
You might like
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
php 函数中使用static的说明
2012/06/01 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python根据时间获取周数代码实例
2019/09/30 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
python super用法及原理详解
2020/01/20 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python中zip函数如何使用
2020/06/04 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
写好自荐信需做到的5要点
2014/03/07 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
体育教师求职信
2014/05/24 职场文书
个人授权委托书范本
2014/09/14 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
银行资信证明
2015/06/17 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis