数据库,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、用户名、密码等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构测试模拟题(3)

1、两个有序链表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 创建链表 node* CreatList(){int x;node *head new node(); // 创建头节点head->next NULL;node *tail head; // 尾指针初始指向头节点while…

LabVIEW Val (Sgnl) 属性

在 LabVIEW 事件驱动架构中&#xff0c;Val (Sgnl) 属性&#xff08;Value (Signaling)&#xff09;是实现编程触发与用户交互行为一致性的关键技术。与普通 Value 属性不同&#xff0c;Val (Sgnl) 在修改控件值的同时强制生成值改变事件&#xff0c;确保程序逻辑与 UI 交互保持…

04.MySQL数据类型详解

MySQL数据类型详解 文章目录 MySQL数据类型数据类型分类数值类型 tinyint类型bit类型float类型decimal类型 字符串类型 char类型varchar类型char和varchar比较 时间日期类型enum和set类型数据类型选择的进阶技巧常见误区与解决方案性能优化与最佳实践 MySQL数据类型 数据类型…

Spring AI 之对话记忆(Chat Memory)

大型语言模型&#xff08;LLMs&#xff09;是无状态的&#xff0c;这意味着它们不会保留关于之前交互的信息。当想在多次交互中保持上下文或状态时&#xff0c;这可能会成为一个限制。为了解决这一问题&#xff0c;Spring AI 提供了对话记忆功能&#xff0c;允许你在与大型语言…

Hölder Statistical Pseudo Divergence Proper Hölder Divergence

目录 Hlder Statistical Pseudo DivergenceProper Hlder Divergence Hlder Statistical Pseudo Divergence Hlder Statistical Pseudo Divergence是一种度量两个概率分布 p p p 和 q q q差异的方法&#xff0c;它基于Hlder不等式。定义如下&#xff1a; D α H ( p : q ) 1 …

时序数据库IoTDB基于云原生的创新与实践

概述 Apache IoTDB 是一款独立自研的物联网时序数据库&#xff0c;作为 Apache 基金会的顶级项目&#xff0c;它融合了产学研的优势&#xff0c;拥有深厚的科研基底。IoTDB 采用了端边云协同的架构&#xff0c;专为物联网设计&#xff0c;致力于提供极致的性能。 数据模型 I…

git 如何解决分支合并冲突(VS code可视化解决+gitLab网页解决)

1、定义&#xff1a;两个分支修改了同一文件的同一行代码&#xff0c;无法自动决定如何合并代码&#xff0c;需要人工干预的情况。&#xff08;假设A提交了文件a,此时B在未拉取代码的情况下&#xff0c;直接提交是会报错的&#xff0c;此时需要拉取之后再提交才会成功&#xff…

系统架构设计师(一):计算机系统基础知识

系统架构设计师&#xff08;一&#xff09;&#xff1a;计算机系统基础知识 引言计算机系统概述计算机硬件处理器处理器指令集常见处理器 存储器总线总线性能指标总线分类按照总线在计算机中所处的位置划分按照连接方式分类按照功能分类 接口接口分类 计算机软件文件系统文件类…

聊一聊接口测试中缓存处理策略

目录 一、强制绕过缓存 添加时间戳参数 修改请求头 二、主动清除缓存 清除本地缓存 清除服务端缓存&#xff08;需权限&#xff09; 清除CDN缓存 三、测试缓存逻辑 首次请求获取数据 记录响应头中的缓存标识​​​​​ 验证缓存生效 测试缓存过期​​​​​​​ 四…

机器学习算法-逻辑回归

今天我们用 「预测考试是否及格」 的例子来讲解逻辑回归&#xff0c;从原理到实现一步步拆解&#xff0c;保证零基础也能懂&#xff01; &#x1f3af; 例子背景 假设你是班主任&#xff0c;要根据学生的「学习时间」预测「是否及格」&#xff0c;手上有以下数据&#xff1a;…

【论文解读】CVPR2023 PoseFormerV2:3D人体姿态估计(附论文地址)

论文链接&#xff1a;https://arxiv.org/pdf/2303.17472 源码链接&#xff1a;https://github.com/QitaoZhao/PoseFormerV2 Abstract 本文提出了 PoseFormerV2&#xff0c;通过探索频率域来提高 3D 人体姿态估计的效率和鲁棒性。PoseFormerV2 利用离散余弦变换&#xff08;DC…

DRW - 加密市场预测

1.数据集描述 在本次比赛中&#xff0c;数据集包含加密市场的分钟级历史数据。您的挑战是预测未来的加密货币市场价格走势。这是一项kaggle社区预测竞赛&#xff0c;您可以以 CSV 文件的形式或通过 Kaggle Notebooks 提交您的预测。有关使用 Kaggle Notebooks 的更多详细信息&a…

嵌入式Linux系统中的启动分区架构

在嵌入式Linux系统架构中,Linux内核、设备树(Device Tree)与引导配置文件构成了系统启动的基础核心。如何安全、高效地管理这些关键文件,直接影响到系统的稳定性与可维护性。近年来,越来越多的嵌入式Linux开发者选择将启动相关文件从传统的“混合存放”方式,转向采用独立…

用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究

摘要&#xff1a;在数字化时代&#xff0c;平台流量用户尚未完全转化为企业的数字资产&#xff0c;唯有将其沉淀至私域流量池并实现可控、随时触达&#xff0c;方能成为企业重要的数字资产。本文从用户资产化视角出发&#xff0c;探讨开源AI智能名片链动21模式S2B2C商城小程序在…

Spring是如何实现属性占位符解析

Spring属性占位符解析 核心实现思路1️⃣ 定义占位符处理器类2️⃣ 处理 BeanDefinition 中的属性3️⃣ 替换具体的占位符4️⃣ 加载配置文件5️⃣ Getter / Setter 方法 源码见&#xff1a;mini-spring 在使用 Spring 框架开发过程中&#xff0c;为了实现配置的灵活性&#xf…

【大模型面试每日一题】Day 31:LoRA微调方法中低秩矩阵的秩r如何选取?

【大模型面试每日一题】Day 31&#xff1a;LoRA微调方法中低秩矩阵的秩r如何选取&#xff1f; &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官:LoRA微调方法中低秩矩阵的秩r如何选取&#xff1f;&#xff1a; #mermaid-svg-g5hxSxV8epzWyP98 {font-family:"…

字节golang后端二面

前端接口使用restful格式&#xff0c;post与get的区别是什么&#xff1f; HTTP网络返回的状态码有哪些&#xff1f; go语言切片与数组的区别是什么&#xff1f; MySQL实现并发安全避免两个事务同时对一个记录写操作的手段有哪些&#xff1f; 如何实现业务的幂等性&#xff08;在…

Spring Security安全实践指南

安全性的核心价值 用户视角的数据敏感性认知 从终端用户角度出发,每个应用程序都涉及不同级别的数据敏感度。以电子邮件服务与网上银行为例:前者内容泄露可能仅造成隐私困扰,而后者账户若被操控将直接导致财产损失。这种差异体现了安全防护需要分级实施的基本原则: // 伪…

Leetcode第451场周赛分析总结

题目链接 竞赛 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 题目解析 A. 3560. 木材运输的最小成本 AC代码 class Solution { public:long long minCuttingCost(int n, int m, int k) {if (n > m) swap(n, m); // n < m;using ll long lon…

Linux中的shell脚本

什么是shell脚本 shell脚本是文本的一种shell脚本是可以运行的文本shell脚本的内容是由逻辑和数据组成shell脚本是解释型语言 用file命令可以查看文件是否是一个脚本文件 file filename 脚本书写规范 注释 单行注释 使用#号来进行单行注释 多行注释 使用 : " 注释内容…