当前位置: 首页 > article >正文

数据库,Spring Boot,数据源

您是对的,我之前的回答解释了Spring Boot在操作MySQL时不一定需要显式配置指定的数据源类型,因为它有自动配置机制,但没有直接点明在自动配置情况下“数据源是什么”。

在Spring Boot自动配置机制下,这个“数据源”指的是一个连接池(Connection Pool)的实现

以下是针对“数据源是什么”以及Spring Boot如何处理它的关键笔记:


Spring Boot 中的数据源(连接池)关键笔记 📝

  • 数据源的本质:在Java应用(包括Spring Boot)中,当我们谈论“数据源 (DataSource)”时,通常指的是一个实现了 javax.sql.DataSource 接口的对象。这个对象的主要作用是作为数据库连接的工厂,更常见的是它封装了一个数据库连接池

  • 为什么需要连接池

    • 数据库连接的创建和销毁是昂贵的操作,耗时且消耗资源。
    • 连接池预先创建并维护一定数量的数据库连接,当应用程序需要连接时,直接从池中获取,使用完毕后归还给池,而不是直接关闭。
    • 这极大地提高了数据库操作的性能和效率,并能更好地管理数据库连接资源。
  • Spring Boot 自动配置的连接池:当你在 pom.xml (Maven) 或 build.gradle (Gradle) 中加入了像 spring-boot-starter-data-jpaspring-boot-starter-jdbc 这样的依赖,并且类路径中存在相应的数据库驱动(如 mysql-connector-j),Spring Boot会尝试按以下顺序自动配置一个连接池作为数据源:

    1. HikariCP:如果HikariCP的库在类路径上,Spring Boot会优先选择它。HikariCP以其高性能、轻量级和可靠性而闻名,是Spring Boot 2.0及以后版本的默认选择(如果可用)。
    2. Tomcat JDBC Pool:如果HikariCP不可用,但Tomcat JDBC Pool(通常通过 spring-boot-starter-web 间接引入,因为它内嵌了Tomcat)在类路径上,则会使用它。
    3. Apache Commons DBCP2:如果以上两者都不可用,且Apache Commons DBCP2在类路径上,则会选用它。
  • 如何知道当前使用的是哪个数据源

    • 启动日志:Spring Boot启动时,如果开启了DEBUG级别的日志(例如,在application.properties中设置 logging.level.org.springframework.boot.autoconfigure.jdbc=DEBUGlogging.level.com.zaxxer.hikari=DEBUG),通常可以看到关于数据源配置的详细信息。
    • Actuator端点:如果项目中引入了 spring-boot-starter-actuator,可以通过访问 /actuator/health/actuator/metrics 等端点来间接了解数据源的健康状况和一些指标,有时也能推断出具体类型。
    • 代码检查:在代码中注入 javax.sql.DataSource bean,然后打印 dataSource.getClass().getName() 也能看到实际的类名。
  • 显式指定数据源类型:正如之前笔记提到的,如果不想使用Spring Boot的自动选择,或者想使用不在上述优先级的其他连接池(比如阿里巴巴的Druid),可以通过在 application.propertiesapplication.yml 中设置 spring.datasource.type 属性来显式指定,例如:

    spring.datasource.type=com.zaxxer.hikari.HikariDataSource
    # 或者
    # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    

总结来说,在Spring Boot操作MySQL时,这个“数据源”通常是一个高性能的数据库连接池实现,如HikariCP,由Spring Boot根据类路径上的可用库自动配置和管理。开发者主要通过配置文件提供数据库的连接信息(URL、用户名、密码等)。

相关文章:

数据库,Spring Boot,数据源

您是对的,我之前的回答解释了Spring Boot在操作MySQL时不一定需要显式配置指定的数据源类型,因为它有自动配置机制,但没有直接点明在自动配置情况下“数据源是什么”。 在Spring Boot自动配置机制下,这个“数据源”指的是一个连接…...

Linux 第三阶段课程:数据库基础与 SQL 应用

数据库定义 数据库是按一定规则存储数据的仓库,可存储海量数据(百万级至亿级),数据来源包括文本、图像、音视频等多种形式,如出行记录、消费数据等。 数据库分类 关系型数据库:基于二维表格模型&#xff0…...

计算机网络之路由表更新

1.解题思路 对新接收到的路由表进行更新,全部"距离"1,且"下一跳路由器"都写成发送方路由器的名称。 开始对比新表和原来的路由表 1.看目的网络 如果是新的目的网络,则直接把对应的各项信息填入表中;如果是相同…...

万兴PDF手机版

万兴PDF手机版(万兴PDF编辑器)是一款国产PDF编辑工具.万兴PDF安卓版提供PDF文档编辑,AI撰写摘要,文档签名,设置密码保护等功能,万兴PDF专家APP以简约风格及文档编辑功能为核心,支持多设备终端同步保存.全免 万兴 PDF 编辑器是一款功能强大的 PDF 编辑软件,它支持多种…...

Qt -使用OpenCV得到SDF

博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 目录 cv::MatdistanceTransform获得SDF 本文的目标, 是简单学习并使用OpenCV的相关函数, 并获得QImage的SDF(Signed Distance Field 有向距离场) 至…...

Python 中Vector类的格式化实现,重点拆解其超球面坐标系的设计精髓

📌 高维向量的格式化革新 在Vector类第5版中,格式化系统迎来重要升级: 坐标系转型:从Vector2d的极坐标(p’后缀)升级为超球面坐标(h’后缀),支持n维空间维度突破&#…...

DDR5 ECC详细原理介绍与基于协议讲解

本文篇幅较长,涉及背景原理介绍方便大家理解其运作方式 以及 基于DDR5协议具体展开介绍。 背景原理介绍 上图参考:DDR 内存中的 ECC 写入操作时,On-die ECC的工作过程如下: SoC将需要写入到Memory中的数据发送给控制器控制器将需要写入的数据直接发送给DRAM芯片在DDR5 DR…...

Linux系统之gettext详解

gettext 是一个用于国际化(i18n)和本地化(l10n)的工具集,旨在帮助开发者创建多语言支持的应用程序。它主要通过提供一系列工具和库来简化文本翻译过程。 gettext 工作流程 标记源代码:在源代码中用 _() 函…...

基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问

抽出来的,直接用就行 头文件CPP文件使用示例 头文件 #ifndef DATABASECOMMON_H #define DATABASECOMMON_H/** 单例封装SQLite通用操作,支持多线程调用;可扩展兼容其他数据库,照着SysRunDatabase写,并且重载openDataba…...

EC800X QuecDuino开发板介绍

支持的模组列表 EG800KEC800MEC800GEC800E 功能列表 基本概述 EC800X QuecDuino EVB 搭载移远 EC800 系列模组。支持模组型号为: EC800M 系列、EC800K 系列、EG800K 系列、EC800E 系列等。 渲染图 开发板的主要组件、接口布局见下图 资料下载 EC800X-QuecDui…...

ARM P15协处理器指令详解:架构、编程与应用实践

ARM P15协处理器指令详解:架构、编程与应用实践 引言 在ARM处理器架构中,协处理器(Coprocessor)系统是扩展处理器功能的关键机制,其中CP15(即协处理器15)作为系统控制协处理器,承担着内存管理、缓存控制、系统配置等核心功能。本…...

PHP轻量级聊天室源码(源码下载)

最新版本:v2.1.2 (2024.08更新) 运行环境:PHP5.6(无需MySQL) 核心特性:手机电脑自适应、TXT数据存储、50条历史消息 适用场景:小型社区/企业内网/教育培训即时通讯 一、核心功能亮点(SEO关键词布…...

MySQL数据表添加字段(三种方式)

基本概念解析 数据表由行和列组成,专业术语中: 字段(Field):表的纵向列结构记录(Record):表的横向行数据 字段添加方法详解 MySQL支持三种字段添加位置,语法格式均通…...

leetcode hot100刷题日记——33.二叉树的层序遍历

解题总结二维vector的初始化方法 题目描述情况1:不确定行数和列数情况2:已知行数和列数情况3:已知行数但不知道列数情况4:已知列数但不知道行数 题目描述 解答:用队列 思路都差不多,我觉得对于我自己来说&a…...

2、PyTorch基础教程:从张量到神经网络训练

1、PyTorch基础 PyTorch 是一个开源的深度学习框架,以其灵活性和动态计算图而广受欢迎。 PyTorch 主要有以下几个基础概念:张量(Tensor)、自动求导(Autograd)、神经网络模块(nn.Module&#xf…...

《数据结构初阶》【番外篇:快速排序的前世今生】

【番外篇:快速排序的前世今生】目录 前言:---------------起源---------------一、诞生:二、突破:三、核心: ---------------发展---------------1. 早期版本:简单但不稳定1960 年:初始版本 2. …...

【笔记】基于 MSYS2(MINGW64)的 Poetry 虚拟环境创建指南

#工作记录 基于 MSYS2(MINGW64)的 Poetry 虚拟环境创建指南 一、背景说明 在基于 MSYS2(MINGW64)的环境中,使用 Poetry 创建虚拟环境是一种高效且灵活的方式来管理 Python 项目依赖。本指南将详细介绍如何在 PyChar…...

PINNs案例——二维磁场计算

基于物理信息的神经网络是一种解决偏微分方程计算问题的全新方法… 有关PINN基础详见:PINNs案例——中心热源温度场预测问题的torch代码 今日分享代码案例:二维带电流源磁场计算 该案例参考学习论文:[1]张宇娇,孙宏达&#xff0…...

Hive SQL 中 BY 系列关键字全解析:从排序、分发到分组的核心用法

一、排序与分发相关 BY 关键字 1. ORDER BY:全局统一排序 作用:对查询结果进行全局排序,确保最终结果集完全有序(仅允许单个 Reducer 处理数据)。 语法: SELECT * FROM table_name ORDER BY column1 [A…...

数据类型检测有哪些方式?

typeof 其中数组 对象 null都会判断为Object,其他正确 typeof 2 // number typeof true //bolean typeof str //string typeof [] //Object typeof function (){} // function typeof {} //object typeof undefined //undefined typeof null // nullinstanceof 判断…...

算法打开13天

41.前 K 个高频元素 (力扣347题) 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: …...

Freeqwq 世界首个免费无限制 分布式 AI 算力平台 https://qwq.aigpu.cn/

官网:Free QWQ - 免费分布式 AI 算力平台 基于来自全国各地 50 台家用电脑的 3090、4080、4090 显卡分布式算力,我们为开发者提供完全免费、无限制的 QwQ 32B 大语言模型 API。无需注册,无需充值,立即获取 API Key 开始使用。 …...

广告拦截器:全方位拦截,畅享无广告体验

在数字时代,广告无处不在。无论是浏览网页、使用社交媒体,还是观看视频,广告的频繁弹出常常打断我们的体验,让人不胜其烦。更令人担忧的是,一些广告可能包含恶意软件,威胁我们的设备安全和个人隐私。AdGuar…...

.net Avalonia应用程序生命周期

.NET Avalonia 应用程序生命周期全解析 在 .NET 开发领域,Avalonia 作为一个跨平台的 UI 框架,为开发者提供了强大的功能和灵活性。了解 Avalonia 应用程序的生命周期,对于构建高效、稳定的应用至关重要。本文将深入探讨 Avalonia 应用程序生…...

主数据编码体系全景解析:从基础到高级的编码策略全指南

在数字化转型的浪潮中,主数据管理(MDM)已成为企业数字化转型的基石。而主数据编码作为MDM的核心环节,其设计质量直接关系到数据管理的效率、系统的可扩展性以及业务决策的准确性。本文将系统性地探讨主数据编码的七大核心策略&…...

Selenium操作指南(全)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 大家好,今天带大家一起系统的学习下模拟浏览器运行库Selenium,它是一个用于Web自动化测试及爬虫应用的重要工具。 Selenium测试直接运行在…...

Go语言中的数据类型转换

Go 语言中只有强制类型转换,没有隐式类型转换。 1. 数值类型之间的相互转换 1.1. 整型和整型之间的转换 package main import "fmt"func main() {var a int8 20var b int16 40fmt.Println(int16(a) b)// 60 }1.2. 浮点型和浮点型之间的转换 packag…...

35、请求处理-【源码分析】-自定义参数绑定原理

35、请求处理-【源码分析】-自定义参数绑定原理 自定义参数绑定原理主要涉及Spring Boot如何将HTTP请求中的参数自动绑定到控制器方法的自定义对象参数上。以下是详细的解析: ### 1. 参数解析器的选择 - **HandlerMethodArgumentResolverComposite**: - …...

智绅科技——科技赋能健康养老,构建智慧晚年新生态

当老龄化浪潮与数字技术深度碰撞,智绅科技以 “科技赋能健康,智慧守护晚年” 为核心理念,锚定数字健康与养老服务赛道,通过人工智能、物联网、大数据等技术集成,为亚健康群体与中老年人群构建 “监测 - 预防 - 辅助 - …...

STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider

先展示最终实现的功能效果如下: 1.目的与意义 之前在学习STM32移植LVGL图形库的时候,搜到的很多教程都是在官网下载LVGL的文件包,然后一个个文件包含进去,还要添加路径,还要给文件改名字,最后才能修改程序…...