Spring Boot 项目启动时怎么执行SQL文件

本文详细介绍如何在SpringBoot项目启动时执行SQL文件,包括设置sql文件位置、配置属性及注意事项,如避免使用BEGIN和COMMIT包裹DML语句。

Spring Boot 项目启动时怎么执行SQL文件

1 sql文件位置

将sql文件文件放在resouces文件夹目录下,如下:

在这里插入图片描述

2 属性配置

在配置文件除了添加数据库相关配置外,额外再添加如下两行即可。

spring.datasource.schema=classpath:xx.sql
spring.datasource.initialization-mode=always

spring.datasource.schema表示sql文件位置,多个sql文件,逗号隔开。

spring.datasource.schema=classpath:xx1.sql, xx2.sql

spring.datasource.initialization-mode 表示启动时会一直去进行初始化数据源。

3 其他注意事项

sql文件对于生DDL,DML都可以,但本人在项目使用时踩坑了,例如DML语句建议不要用如下格式,执行时会报错,还是通过Debug进入源码才发现原因,去掉BEGIN和COMMIT即正常。

BEGIN;
sql;
COMMIT;
Spring Boot 应用中,可以通过多种方式在应用启动时加载 SQL 文件执行数据库初始化脚本。以下是几种常见的实现方法: ### 使用 `schema.sql` 和 `data.sql` 文件 Spring Boot 提供了对数据库初始化的自动支持,可以在 `application.properties` 或 `application.yml` 中配置数据源后,自动执行 `schema.sql` 和 `data.sql` 文件。 在 `application.properties` 中启用初始化脚本: ```properties spring.datasource.initialization-mode=always spring.datasource.schema=classpath:schema.sql spring.datasource.data=classpath:data.sql ``` - `schema.sql` 通常用于创建表结构。 - `data.sql` 通常用于插入初始数据。 这些 SQL 文件应放在 `src/main/resources` 目录下。 ### 使用 `DataSourceInitializer` 可以通过自定义 `DataSourceInitializer` 来更灵活地控制 SQL 脚本的执行。例如: ```java @Configuration public class DataSourceConfig { @Bean public DataSourceInitializer dataSourceInitializer(DataSource dataSource) { DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); initializer.setDatabasePopulator(databasePopulator()); return initializer; } private DatabasePopulator databasePopulator() { ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScript(new ClassPathResource("custom-init.sql")); populator.setContinueOnError(false); return populator; } } ``` 此配置会在应用启动时执行 `custom-init.sql` 文件中的脚本。 ### 使用 `JPA` 的 `import.sql` 如果使用 JPA 作为持久化框架,可以在 `src/main/resources` 下创建 `import.sql` 文件,该文件会在 Hibernate 初始化后自动执行[^1]。 ### 使用 `Flyway` 或 `Liquibase` 进行数据库迁移 对于更复杂的项目,推荐使用 [Flyway](https://flywaydb.org/) 或 [Liquibase](https://www.liquibase.org/) 进行数据库迁移管理。Spring Boot 提供了对这些工具的自动配置支持。 添加 Flyway 依赖: ```xml <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> ``` Flyway 会自动执行 `src/main/resources/db/migration` 目录下的 SQL 脚本,例如 `V1__Create_table.sql`。 ### 示例 SQL 文件 假设 `schema.sql` 内容如下: ```sql CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE ); ``` `data.sql` 内容如下: ```sql INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'); ``` 这些脚本会在应用启动时自动执行,创建表结构并插入初始数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值