baeldung 2025-03-12
1. 概述
Spring Boot 允许我们将示例数据导入数据库,主要用于为集成测试准备数据。开箱即用,有两种方式:我们可以使用 import.sql(Hibernate 支持)或 data.sql(Spring JDBC 支持)文件来加载数据。
然而,有时我们希望将一个大型 SQL 文件拆分为多个较小的文件,例如为了提高可读性,或者在不同模块之间共享初始化数据。
在本教程中,我们将展示如何同时使用 Hibernate 和 Spring JDBC 实现这一目标。
2. Hibernate 支持
我们可以通过属性 spring.jpa.properties.hibernate.hbm2ddl.import_files 来指定包含要加载的示例数据的文件。该属性可以在测试资源目录下的 application.properties 文件中进行配置。
如果我们只想在 JUnit 测试中加载示例数据,可以这样设置:
spring.jpa.properties.hibernate.hbm2ddl.import_files=import_active_users.sql,import_inactive_users.sql
此配置将从两个文件 import_active_users.sql 和 import_inactive_users.sql 中加载示例数据。需要注意的是,我们必须使用前缀 spring.jpa.properties 才能将值(JPA 配置)传递给 EntityManagerFactory。
接下来,我们将展示如何通过 Spring JDBC 支持实现相同的功能。
3. Spring JDBC 支持
Spring JDBC 的初始化数据配置与 Hibernate 非常相似。我们需要使用 spring.sql.init.data-locations 属性:
spring.sql.init.data-locations=import_active_users.sql,import_inactive_users.sql
如上设置后,其效果与 Hibernate 支持相同。但该方案有一个显著优势:支持使用 Ant 风格的通配符模式:
spring.sql.init.data-locations=import_*_users.sql
上述配置会指示 Spring 查找所有文件名匹配 import_*_users.sql 模式的文件,并导入其中的数据。
注意:该属性自 Spring Boot 2.5.0 起引入;在早期版本中,应使用
spring.datasource.data属性。
4. 结论
在本文中,我们展示了如何配置 Spring Boot 应用程序,使其从自定义 SQL 文件中加载初始数据。
最后,我们介绍了两种方式——Hibernate 和 Spring JDBC。两者都能很好地工作,具体选择哪一种取决于开发者的偏好。