Springboot 源码分析 —— 自动运行 SQL 文件解析

本文分析了Springboot如何在启动时自动运行schema.sql和data.sql文件来初始化数据库。核心涉及DataSourceAutoConfiguration和DataSourceInitializerInvoker类,特别是createSchema()方法用于执行资源定位后的SQL脚本。默认使用主数据源,可通过配置指定不同数据源。
摘要由CSDN通过智能技术生成



1 问题起源

  • 为了方便他人操作自己的项目,在项目中配置好需要用到的数据库表和相关数据
  • 只要在资源路径中添加 schema.sqldata.sql 文件,springboot 在运行的时候就会自动关联数据库创建相应的表和数据


2 源码跟踪

2.1 核心类:DataSourceAutoConfiguration

@Configuration
@ConditionalOnClass({
   DataSource.class, EmbeddedDatabaseType.class})
@EnableConfigurationProperties({
   DataSourceProperties.class})
//DataSourceAutoConfiguration 这个类导入了另一个类:DataSourceInitializationConfiguration
@Import({
   DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class})
public class DataSourceAutoConfiguration {
   ...}

@Configuration
//这个类导入了DataSourceInitializationConfiguration.Registrar:完成了DataSourceInitializerPostProcessor后置处理器的注册
//这个类导入了DataSourceInitializerInvoker:这个类完成了sql文件自动执行
@Import({
   DataSourceInitializerInvoker.class, DataSourceInitializationConfiguration.Registrar.class})
class DataSourceInitializationConfiguration {
   
    DataSourceInitializationConfiguration() {
   
    }
    static class Registrar implements ImportBeanDefinitionRegistrar {
   
        private static final String BEAN_NAME = "dataSourceInitializerPostProcessor";
        Registrar() {
   
        }
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
   
            if (!registry.containsBeanDefinition("dataSourceInitializerPostProcessor")) {
   
                GenericB
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值