关于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新手教程之ArrayList的基本使用
Jun 20 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
详解Java七大阻塞队列之SynchronousQueue
Sep 04 Java/Android
SpringCloud之@FeignClient()注解的使用方式
Sep 25 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 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 IP及IP段进行访问限制的代码
2008/12/17 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
Python守护进程用法实例分析
2015/06/04 Python
Python六大开源框架对比
2015/10/19 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
python写一个随机点名软件的实例
2019/11/28 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
销售总监工作职责
2013/11/21 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
委托书范本格式
2019/04/18 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL