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

相关推荐
路修几秒前
Spring Boot + Elasticsearch + HBase 构建海量数据搜索系统
spring boot·elasticsearch·hbase
玄辰星君9 分钟前
PostgreSQL 入门教程
数据库·postgresql
武子康20 分钟前
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
xml·java·大数据·开发语言·后端·spring
泽韦德21 分钟前
【Redis】笔记|第9节|Redis Stack扩展功能
数据库·redis·笔记
喜欢踢足球的老罗27 分钟前
使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库
数据库·spring boot·mysql
文牧之28 分钟前
PostgreSQL 的扩展pg_prewarm
运维·数据库·postgresql
米粉030530 分钟前
SpringBoot核心注解详解及3.0与2.0版本深度对比
java·spring boot·后端
行星00831 分钟前
Postgresql字符串操作函数
数据库·postgresql
清风~徐~来2 小时前
【Redis】类型补充
数据库·redis·缓存
一只帆記2 小时前
SpringBoot EhCache 缓存
spring boot·后端·缓存