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

相关推荐
金仓拾光集3 分钟前
__工艺数据管理的范式转变:金仓数据库替代MongoDB实操实践__
数据库·mongodb
紫荆鱼7 分钟前
设计模式-迭代器模式(Iterator)
c++·后端·设计模式·迭代器模式
xiaogg367811 分钟前
redis-cluster集群配置部署
数据库·redis·缓存
运维小文27 分钟前
MySQL高可用方案MIC&mysqlCluster+mysqlRouter
数据库·mysql·mic·mysql高可用·mysqlcluster·mysqlrouter
不剪发的Tony老师27 分钟前
Redis Commander:一款基于Web、免费开源的Redis管理工具
数据库·redis
java水泥工31 分钟前
课程答疑系统|基于SpringBoot和Vue的课程答疑系统(源码+数据库+文档)
spring boot·vue·计算机毕业设计·java毕业设计·大学生毕业设计·课程答疑系统
RainSky_37 分钟前
LNMP 一键安装包部署 Django 项目
后端·django·1024程序员节
金仓拾光集1 小时前
__金仓数据库替代MongoDB护航医疗隐私:医院患者随访记录安全存储实践__
数据库·安全·mongodb
追逐时光者1 小时前
一个开源免费、轻量级的 Avalonia UI 控件库
后端·.net
Tiandaren1 小时前
自用提示词02 || Prompt Engineering || RAG数据切分 || 作用:通过LLM将文档切分成chunks
数据库·pytorch·深度学习·oracle·prompt·rag