关于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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
Java实现简易的分词器功能
Jun 15 Java/Android
Java多条件判断场景中规则执行器的设计
Jun 26 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
Dec 06 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Android开发 使用文件储存的方式保存QQ密码
Apr 24 Java/Android
Android studio 简单计算器的编写
May 20 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue配置接口域名方法总结
2019/05/12 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python读取csv文件实例解析
2019/12/30 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
主题团日活动总结
2014/06/25 职场文书
办公室文员岗位职责
2015/02/04 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS