一、druid和druid-spring-boot-starter区别分析

  1. 作用是一样的,都是连接池提供连接,里边的配置参数都是一样的;
  2. druid-spring-boot-starter只是在druid基础上进行了一次封装,专门用来整合spring-boot项目;

    如果springboot项目想使用druid也是可以的,但是需要手动编写配置类并注入到bean中,并加载对应的配置参数;但是不建议,明明有现成封装好的jar,就直接使用就好了!!!

二、springboot项目中提示报错Cannot resolve configuration property 'spring.datasource.xxxx'

1、问题发现:

定位接口无响应问题时,发现是由于数据库挂了导致的;但是不应该呀,数据库连接池设置了最大等待超时时间还是有返回的,然后深入解读代码,发现是配置参数有问题

2、分析

问题1:为什么datasource下边就没有这些参数,这样子配置居然没有报错,只是提示? ---> 原来spring-boot是可以配置不存在的key值,只要保证格式正确,在加载的时候不会解析错误的key

问题2:那应该怎么配置? ---> 查看源码分析

(1)第一步:先找到druid配置类 ---> spring-boot-starter的自动配置类基本都是xxxxxAutoConfigure 或xxxxxAutoConfiguration

发现druid配置类中注入了一个DruidDataSourceWrapper实例,且用@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})开启@ConfigurationProperties注解配置

(2)第二步:找到对应的bean实例DruidDataSourceWrapper,发现使用注解@ConfigurationProperties配置了前缀:spring.datasource.druid,把该前缀开头的主配置文件中配置属性设置到对于的Bean属性上

(3)第三步:Bean本身没有属性,都是继承抽象类父类的属性,基本都设置了默认值。

spring:
#数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.100.99:3306/energy_storage_test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5 # 初始化大小
min-idle: 5 # 最小空闲连接个数
max-active: 20 # 最大连接个数
max-wait: 60000 # 配置获取连接等待超时的时间
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次监测,监测需要关闭的空闲连接,单位时毫秒
min-evictable-idle-time-millis: 60000 # 配置一个连接在池中最小生存的时间
validation-query: select 'x' # 用来监测连接是否有效的sql,要求是一个查询语句
test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-return: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
pool-prepared-statements: true # 打开PSCache,并且指定每个连接上PSCache的大小
max-open-prepared-statements: 20
filter:
commons-log:
connection-logger-name: stat,wall,log4j # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,此处是filter修改的地方

3、总结

①springboot项目整合druid,建议使用druid-spring-boot-strater,但是不代表druid一定不可以使用,有兴趣的可以自己试试

②配置yaml文件时,一定要使用druid下边的参数,要不然不起作用

三、Hikari连接池(下篇博文中会介绍druid切换成hikari时遇到的问题)

springboot2.0默认集成了hikari连接池,号称史上性能最好,速度最快的连接池,自动装配原理都一样,大家可以试试,下面附上常用的一些参数配置

spring:
datasource:
username: dangbo
password: dangbo
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306?auth_shiro
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5 # 最小空闲数,默认值为10
maximum-pool-size: 15 # 最大连接数,默认值为10
auto-commit: true # 控制从池返回的连接的默认自动提交行为
idle-timeout: 30000 # 控制允许连接在池中闲置的最长时间,默认值10min
pool-name: DatebookHikariCP # 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置。 默认:自动生成
max-lifetime: 1800000 # 池中连接的最大生存期,默认值30min
connection-timeout: 30000 # 控制客户端将等待来自池的连接的最大毫秒数,默认值为30s
connection-test-query: SELECT 'x'

hikari配置参考于:https://blog.csdn.net/Maskkiss/article/details/82115149

druid和druid-spring-boot-starter区别,以及springboot项目中提示报错Cannot resolve configuration property 'spring.datasource.xxxx' 和hikari配置属性的更多相关文章

  1. Spring Boot 2.1.7 启动项目失败,报错: "Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured."

    一开始按照网上的很多解决办法是: 启动类头部声明@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}),但是这样会排除 ...

  2. 【spring boot】使用注解@ConfigurationProperties读取配置文件时候 报错 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rocketmqAutoConfiguration': Unsatisfied dependenc

    如题,配置文件如下: #注册中心配置 eureka: instance: instanceId: ${spring.application.name}:${random.int} hostname: ...

  3. 关于spring boot 使用 mybatis plus INSERT的时候id报错

    mybatis plus 在INSERT的时候会默认自动设置插入id 我当时数据库采用的id自增. 在使用插入语句的时候并没有set  ID 但是它默认给了一大串 更改mybatis plus全局配置 ...

  4. Druid Spring Boot Starter 从配置到简单运行 -解决zone不匹配 -解决dataSource加载失败

    Druid Spring Boot Starter 中文 | English Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池 ...

  5. 从零开始开发一个Spring Boot Starter

    一.Spring Boot Starter简介 Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件 ...

  6. 三分钟实战手写Spring Boot Starter

    1 背景 在平时的开发中,开发的同学会把一些通用的方法,写成一个工具类,例如日期转换的,JSON转换的等等,方便业务后续调用,使代码更容易维护. 如果一些更常用的方法,例如鉴权的,加解密的等等,几乎每 ...

  7. Spring Boot Starter 介绍

    http://www.baeldung.com/spring-boot-starters 作者:baeldung 译者:http://oopsguy.com 1.概述 依赖管理是任何复杂项目的关键部分 ...

  8. spring -boot s-tarter 详解

    Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合.你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符.例如,如果你想使用Sprin ...

  9. Spring Cloud和Spring Boot的区别

    Spring MVC: Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC ...

  10. Spring Boot (一): Spring Boot starter自定义

    前些日子在公司接触了spring boot和spring cloud,有感于其大大简化了spring的配置过程,十分方便使用者快速构建项目,而且拥有丰富的starter供开发者使用.但是由于其自动化配 ...

随机推荐

  1. NettyHandler 常用生命周期方法

    NettyHandler 常用生命周期方法 @Component @ChannelHandler.Sharable //表示这里是线程安全的 public class ImServerHandler ...

  2. Linux CentOS 8 安装DHCP服务

    DHCP 如果虚拟机没有 /etc/dhcp/dhcpd.conf 文件,这可能是因为 DHCP 服务器软件包尚未安装,或者安装后配置文件未创建. 要创建 DHCP 服务器配置文件 dhcpd.con ...

  3. BBS项目(一): 表设计 注册功能 登录功能 生成随机验证码

    目录 表设计 1.确定表的数量 2.确定表的基础字段 自关联字段 3.确定表的外键字段 表关系图 项目初建流程备忘 注册功能 登录功能 生成随机验证码 表设计 # 仿造博客园项目 核心:文章的增删改查 ...

  4. Windows | 安装 Docker 遇到的 WSL 2 installation is incomplete 报错的解决方案

    控制面板中打开 Windows功能,在其中勾选 适用于 Linux 的 Windows 子系统 下载 WSL 更新包(非最新版本的也会报错) 更新包下载链接:https://wslstorestora ...

  5. 3D编程模式:开篇

    大家好~现在开始新的系列文章:3D编程模式系列 本系列会介绍从我的实际开发经验中抽象提炼出来的编程模式,大家可直接应用它们到3D引擎开发.编辑器开发等领域中 相关资料: 课程录像回放 代码和课程ppt ...

  6. C#查找算法1:二分查找

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 原理:将n个元素分成个数大致相同的两半,取 ...

  7. java基础-方法method-day05

    1. 语法 [修饰符] 返回值类型 方法名(形参列表){ 逻辑主体 } public class TestMethod01{ public static int add(int num1, int n ...

  8. 小白学标准库之 mux

    本文介绍第三方库 gorilla/mux,相比于 Go 自带的 net/http 它能提供更为强大的路由处理功能. mux 表示 HTTP request multiplexer (HTTP 请求多路 ...

  9. Linux系统下安装JDK8和Maven3.8.5

    一.下载JDK8Linux版本 官网下载太慢了,小编这里为大家下载好了: 链接:百度网盘地址 提取码:ov24 二.下载Maven maven3.8.5下载链接 三.使用xftp上传到linux上 四 ...

  10. Java-Enum常量特定方法

    OnJava8-Enum-常量特定方法 用枚举实现责任链模式 责任链(Chain Of Responsibility)设计模式先创建了一批用于解决目标问题的不同方法,然后将它们连成一条"链& ...