关于springboot配置druid数据源不生效问题(踩坑记)

作者:九天漩女 时间:2021-08-04 13:46:08 

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,希望这个文章可以帮助那些和我一样踩坑的人。

来源:https://blog.csdn.net/qq_35754976/article/details/120456967

标签:springboot,druid,数据源
0
投稿

猜你喜欢

  • C#异步委托调用实例分析

    2022-12-14 05:41:06
  • Mybatis的几种传参方式详解

    2021-12-08 15:35:53
  • Java Maven依赖传递,可选依赖,排除依赖详解

    2022-06-09 14:24:14
  • JavaFX之TableView的使用详解

    2022-07-16 06:32:24
  • 前端如何调用后端接口进行数据交互详解(axios和SpringBoot)

    2023-10-17 02:48:43
  • C#实现一个控制台的点餐系统

    2023-09-03 20:47:24
  • Spring Boot应用事件监听示例详解

    2022-06-12 22:39:02
  • C#记一次http协议multipart/form-data的boundary问题

    2021-07-01 17:45:49
  • Android studio删除Android项目方法

    2022-01-24 01:56:05
  • ViewFlipper实现上下翻滚轮播效果

    2023-10-06 08:55:40
  • Java类的定义以及执行顺序学习教程

    2023-01-14 10:44:29
  • Java 深拷贝与浅拷贝的分析

    2023-07-30 14:13:13
  • javafx实现时钟效果

    2022-09-10 02:23:31
  • Android 2.3.7.r1 camera录像过程中按menu菜单键时会停止录像

    2023-06-13 01:46:10
  • Java基础知识之StringWriter流的使用

    2023-01-19 00:47:52
  • Spring与Struts整合之让Spring管理控制器操作示例

    2022-08-22 12:53:46
  • Android ActionBarActivity设置全屏无标题的方法总结

    2023-01-23 04:49:37
  • Java8中Lambda表达式使用和Stream API详解

    2022-04-27 13:25:23
  • 浅谈Spring Cloud Ribbon的原理

    2023-07-23 04:11:25
  • 基于springboot2集成jpa,创建dao的案例

    2021-08-02 00:40:46
  • asp之家 软件编程 m.aspxhome.com