Spring Boot导入多个SQL文件

2023/05/18

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 Boot中,我们需要使用spring.datasource.data属性

4. 总结

在这篇简短的文章中,我们展示了如何配置Spring Boot应用程序以从自定义SQL文件加载初始数据。

最后,我们展示了两种可能性:Hibernate和Spring JDBC。它们都工作得很好,选择哪一个取决于开发人员。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章