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

Spring Boot 与数据源的集成

Spring Boot 与数据源的集成源码分析

Spring Boot 是基于 Spring 框架构建的快速开发平台,它提供了一种自动化配置的方式来简化各种常见的开发任务,其中包括数据源的配置和集成。在 Spring Boot 中,数据源的集成不仅仅依赖于 Spring Data,还通过其强大的自动配置机制帮助开发者轻松地集成和使用不同类型的数据库。Spring Boot 默认支持多种数据源的配置,例如 HikariCP、Tomcat JDBC 和 DBCP2。


1. Spring Boot 数据源自动配置的实现

在 Spring Boot 中,数据源的集成是通过DataSourceAutoConfiguration类实现的,该类位于org.springframework.boot.autoconfigure.jdbc包中。它的主要作用是自动配置数据源。Spring Boot 的自动配置是基于@EnableAutoConfiguration注解和@Configuration注解来实现的。

自动配置流程

java复制

@Configuration @ConditionalOnClass(DataSource.class) @AutoConfigureBefore(DataSourceTransactionManagerAutoConfiguration.class) public class DataSourceAutoConfiguration { @Bean @Primary @ConditionalOnMissingBean(DataSource.class) public DataSource dataSource(DataSourceProperties properties) { HikariDataSource dataSource = new HikariDataSource(); properties.configure(dataSource); return dataSource; } }
  1. @ConditionalOnClass(DataSource.class):确保只有在类路径中存在数据库连接的相关类时才会启用数据源自动配置。
  2. @AutoConfigureBefore(DataSourceTransactionManagerAutoConfiguration.class):确保数据源在事务管理器配置之前进行配置。
  3. @Bean@Primary:表示默认配置的数据源会被应用到 Spring 容器中,作为DataSource类型的 Bean。

如上代码所示,DataSourceAutoConfiguration会在类路径中包含DataSource类时启用,并在没有显式配置数据源时自动创建DataSource。这里使用的默认数据源是HikariDataSource,它是一个高性能的数据库连接池实现。


2. 数据源的初始化与配置

Spring Boot 通过DataSourceProperties来接收数据源的配置信息。DataSourceProperties是一个配置类,它会从application.propertiesapplication.yml文件中读取数据源的配置信息,如数据库 URL、用户名、密码等。

示例代码

java复制

@ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; private String username; private String password; private String driverClassName; private String hikari; // Getter 和 Setter 方法 public void configure(HikariDataSource dataSource) { dataSource.setJdbcUrl(this.url); dataSource.setUsername(this.username); dataSource.setPassword(this.password); dataSource.setDriverClassName(this.driverClassName); // 其他 Hikari 配置 } }
  • DataSourceProperties会自动绑定application.properties中配置的数据源参数。
  • 通过上面的配置,DataSourceProperties会自动注入数据库的连接信息,DataSourceAutoConfiguration会利用这些配置信息创建一个HikariDataSource实例,并将其注入到 Spring 容器中。

3. 配置 HikariCP 作为数据源

Spring Boot 默认使用HikariCP作为连接池实现。HikariCP 是目前性能最好的连接池之一,它具备高效、低延迟和高吞吐量的特性。

HikariCP 数据源的配置

DataSourceAutoConfiguration类中,HikariDataSource会使用DataSourceProperties中的配置信息进行初始化。你可以通过spring.datasource.hikari配置来调整 HikariCP 的各种参数。例如:

properties复制

spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.idle-timeout=30000

这些配置项可以通过HikariDataSource的方法进行设置,例如:

java复制

dataSource.setMaximumPoolSize(10); dataSource.setMinimumIdle(5); dataSource.setIdleTimeout(30000);

Spring Boot 通过这种方式将 HikariCP 配置和 Spring 环境进行绑定,并在启动时创建连接池。


4. 多数据源配置

Spring Boot 也支持多数据源配置。假设我们有两个数据源,一个是主数据库,另一个是从数据库,我们需要分别配置两个数据源。

示例配置

application.properties中进行如下配置:

properties复制

# 主数据源 spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db spring.datasource.primary.username=primary_user spring.datasource.primary.password=primary_password # 从数据源 spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db spring.datasource.secondary.username=secondary_user spring.datasource.secondary.password=secondary_password

在配置类中分别定义两个数据源:

java复制

@Configuration public class DataSourceConfig { @Primary @Bean(name = "primaryDataSource") public DataSource primaryDataSource(DataSourceProperties primaryProperties) { return primaryProperties.initializeDataSourceBuilder().build(); } @Bean(name = "secondaryDataSource") public DataSource secondaryDataSource(DataSourceProperties secondaryProperties) { return secondaryProperties.initializeDataSourceBuilder().build(); } }

此时,primaryDataSource()secondaryDataSource()会分别创建两个数据源,并通过@Primary注解标记主数据源。


5. 事务管理与数据源集成

Spring Boot 提供了自动配置的数据源事务管理器。在DataSourceAutoConfiguration中,PlatformTransactionManager会根据数据源的配置自动初始化。具体实现如下:

示例代码

java复制

@Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
  • PlatformTransactionManager提供了事务管理的接口。
  • DataSourceTransactionManager是其实现类,用于管理数据库事务。

总结

Spring Boot 通过DataSourceAutoConfigurationDataSourceProperties提供了强大的数据源自动配置功能,简化了数据源的初始化和管理。默认情况下,Spring Boot 使用HikariCP作为连接池实现,并支持多数据源配置。此外,Spring Boot 还自动配置了事务管理器,使得事务管理与数据源集成更加便捷。通过这些机制,开发者可以轻松地集成和使用不同类型的数据库,而无需复杂的配置。

http://www.jsqmd.com/news/330920/

相关文章:

  • jQuery Mobile 表单选择
  • 【毕业设计】基于SSM的学生选课管理系统(源码+文档+远程调试,全bao定制等)
  • 宏智树 AI:3 类学术 PPT 零门槛!开题、答辩、汇报 30 分钟搞定
  • Spring Boot 的安全机制
  • 古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
  • 为什么懂开发的UI设计公司更容易成功?
  • jQuery Mobile 按钮:全面解析与最佳实践
  • Python 学习资源汇总手册
  • 【笔记】【筹码分布图】
  • 医疗连续体机器人模块化控制界面设计(2025年更新版Python库) - 实践
  • AI大模型基于LangChain 进行RAG与Agent智能体开发
  • ScalingLaws-2022-Chinchilla-2:既然Dₒₚₜ/Nₒₚₜ≈20,为什么LLaMA系列用的D/N远大于20【Chinchilla比例:每个参数大约对应20个token】
  • 汉中火锅串串聚餐首选|把把赢火锅串串,24小时鲜货不停歇
  • 开题报告 雅韵古诗词系统python爬虫
  • 《提示工程架构师:开启Agentic AI创新价值宝库的钥匙》
  • 完整教程:程序员技术成长导航,专栏汇总
  • 开发一个Android App: 打牌计分器
  • 【毕业设计】基于SSM的疫情健康上报管理系统(源码+文档+远程调试,全bao定制等)
  • SSM毕设项目推荐-基于SSM实现手机销售商城系统基于SSM的手机商城【附源码+文档,调试定制服务】
  • 提示工程架构师必备:响应优化的服务降级策略
  • 软件测试基础知识
  • 电商数据分析中的多步骤推理挑战
  • 题解:Transformation
  • 高二上期末考试总结
  • 【毕业设计】基于SSM的手机商城(源码+文档+远程调试,全bao定制等)
  • 从技术批判到政治决断:论算法黑箱的资本逻辑与语境主权的治理革命
  • Dify 实战:通过 Dify 快速接入 MCP Server
  • SSM毕设选题推荐:基于SSM的疫情健康上报管理系统小区疫情防控系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机SSM毕设实战-基于SSM的疫情健康上报管理系统疫情数据上报、疫情数据分析、疫情信息发布、健康打卡管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • VSCode 下如何检查 Vue 项目中未使用的依赖?