关于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 将PPT幻灯片转为HTML文件的实现思路
Jun 11 Java/Android
详解Java实践之抽象工厂模式
Jun 18 Java/Android
详解Spring事件发布与监听机制
Jun 30 Java/Android
Mybatis-plus在项目中的简单应用
Jul 01 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
mybatis3中@SelectProvider传递参数方式
Aug 04 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
Java实现简单小画板
Jun 10 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 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简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python base64编码解码实例
2015/06/21 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang