关于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 30 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Java 多态分析
Apr 26 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Android中View.post和Handler.post的关系
Jun 05 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
Jun 10 Java/Android
Java完整实现记事本代码
Jun 16 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安全配置
2006/10/09 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
js 三级关联菜单效果实例
2013/08/13 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
js模糊查询实例分享
2016/12/26 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
python实现socket端口重定向示例
2014/02/10 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python实现计算最小编辑距离
2016/03/17 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python计算信息熵实例
2020/06/18 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2014年销售部工作总结
2014/12/01 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
解约证明模板
2015/06/19 职场文书
公司食堂管理制度
2015/08/05 职场文书
2016七一建党节慰问信
2015/11/30 职场文书