Spring Boot集成Druid
在 ClickHouse数据库之Java篇 文章中,我使用了Druid集成了Clickhouse数据库,这一篇文章,单独就Druid在SpringBoot中进行集成的若干问题进行入门指导。
引入Druid非常的简单,如果只是使用starter启动依赖,两步就够了。
1.SpringBoot笔记:(3)Druid+Mybatis+Mysql 配置
2.Spring+Mybatis+Druid 整合Demo
3.Spring Boot2.x + Druid动态数据源切换
4.Springboot+mybatis+druid注解模式动态切换多数据源
5.数据库连接池Druid的介绍,配置分析对比总结
6.mybatis+druid的配置
7.MyBatis-16MyBatis动态SQL之【支持多种数据库】
8.mybatis 数据库配置
9.SpringBoot Mybatis连接MySQL数据库
1.增加启动器依赖
1 | <!--Druid starter--> |
2.编写配置
编写配置文件,比如下面的使用的是mysql的jdbc,当然也可配置其他的数据库源。
1 | spring: |
1.SpringBoot整合Druid 这里有独立配置Druid,也有使用启动器配置,还有配置多数据源的方式。
2.MyBatis-Plus系列(一)–MyBatis-Plus集成Druid环境搭建 这里还结合了mybatis-plus
3.springboot下使用druid-spring-boot-starter Druid声称是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能。spring boot starter自动装配组件,简化组件引入的开发工作量,所以Druid推出了druid-spring-boot-starter,还讲了Druid的自动注入的原理。
3.多数据源
主要分为如下几步:
1.引入依赖,比druid多了一个 dynamic-datasource-spring-boot-starter
2.application.yml 配置,多了 dynamic 配置
3.启动类排除DRUID默认配置
4.切换数据源,主数据源不需要注解,再从数据源那里加上@DS注解
1.SpringBoot 2.X 整合 druid + dynamic-datasource 多数据源方案
2.Springboot druid dynamic-datasource 配置 这里有上面的四步
4.监控页面
5.sprintboot
要在 springboot 3 上使用,那就需要用springboot3 的依赖
1 | <dependency> |
问题
(1) Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
这里我遇到了一个奇怪的问题,就是说我加了 druid-spring-boot-starter 这个启动依赖之后,最后还是出现了无法找到url配置,这个到底是什么问题呢?
经过重新新建了一个项目,编写yml配置文件,我发现了可以启动druid数据库连接迟,所以我想原因是因为我使用了nacos作为配置中心,但是应用程序没有找到127.0.0.1:8848这个配置中心中的配置。我缺少了 spring-cloud-starter-alibaba-nacos-config 这个依赖。
1 | <dependency> |
【1】.springboot提示‘url‘ attribute is not specified and no embedded datasource could be configured1、查看是否缺少jdbc依赖,如缺少加入以下内容。2.mapper.xml的namespace是否是正确。3、mapper.xml中语句的ID是否和方法名一致。4、mapper.xml中语句的parameterType和resultType对应的类型是否正确。5、还有一种情况就是项目的yml文件没有被扫描到,因为数据库连接配置都是在yml中配置的。这几个问题我都没有。
【2】.关于SpringBoot报错:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded DataSourceAutoConfiguration会自动加载.可以排除此类的自动配置,在启动类中加入:@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
【4】.SpringBoot 整合 Druid Failed to configure a DataSource: ‘url’ attribute is not specified and no embed_Java架构师Array的博客-程序员ITS404 网上的解决方案是错误的,例如:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class } 这种无法使用数据库进行接下来的操作
【5】.springboot启动报错 Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. 在启动类的@EnableAutoConfiguration或@SpringBootApplication中添加exclude = {DataSourceAutoConfiguration.class},排除此类的autoconfig。
(2) Error creating bean with name ‘dataSource’: Unsatisfied dependency expressed through field ‘basicProperties’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties’: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType
这里添加了一个依赖
1 | <dependency> |
(3) Failed to bind properties under ‘spring.datasource.druid’ to javax.sql.DataSource:
这里是因为缺少了依赖,如何没有添加依赖log4依赖包会报错:Failed to bind properties under ‘spring.datasource’ to javax.sql.DataSource,也就是说你在配置里面添加了 filters: stat,wall,log4j,所以需要log4j这个类
1 | <dependency> |
(4) discard long time none received connection
大致意思就是如果一个连接空闲超过60s,就丢弃之(holder)并且打印一条warn日志。
【解决方案】
给druid加一条配置: druid.mysql.usePingMethod=false。原理是让验证空闲连接不使用mysql的ping方法,而是使用select 1,这样每次进入上面提到的源码中时,时间都会刷新,就不会超过60s啦。