关于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 相关文章推荐
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
简单总结SpringMVC拦截器的使用方法
Jun 28 Java/Android
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
Elasticsearch Recovery 详细介绍
Apr 19 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
volatile保证可见性及重排序方法
Aug 05 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设计模式 Visitor 访问者模式
2011/06/28 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
PHP实现八皇后算法
2019/05/06 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Django实现简单分页功能的方法详解
2017/12/05 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
python内打印变量之%和f的实例
2020/02/19 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
公司建议书怎么写
2014/05/15 职场文书
房屋出租委托书格式
2014/09/23 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
琅琊山导游词
2015/02/05 职场文书
大学生入党自传2015
2015/06/26 职场文书
小学英语教学随笔
2015/08/14 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Java获取字符串编码格式实现思路
2022/09/23 Java/Android
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL