数据库,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 属性来显式指定,例如:

    properties 复制代码
    spring.datasource.type=com.zaxxer.hikari.HikariDataSource
    # 或者
    # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

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

相关推荐
二哈喇子!2 小时前
若依【(前后端分离版)SpringBoot+Vue3】
java·spring boot·后端
paopaokaka_luck2 小时前
婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
vue.js·spring boot·后端·websocket·算法·echarts
仰望星空的凡人4 小时前
【JS逆向基础】数据库之MongoDB
javascript·数据库·python·mongodb
Brookty5 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
duration~5 小时前
PostgreSQL并发控制
数据库·postgresql
给力学长6 小时前
自习室预约小程序的设计与实现
java·数据库·vue.js·elementui·小程序·uni-app·node.js
你的人类朋友6 小时前
❤️‍🔥BFF架构版的hello world
前端·后端·架构
孟婆来包棒棒糖~6 小时前
SpringCloude快速入门
分布式·后端·spring cloud·微服务·wpf
雾林小妖6 小时前
springboot集成deepseek
java·spring boot·后端
迷茫运维路7 小时前
MySQL5.7主从延迟高排查优化思路
数据库·主从延时高