一尘不染

Spring Boot中的多个SQL导入文件

spring-boot

根据Spring Boot参考手册,有两种方法可以在应用程序启动时导入数据。结合内存数据库,这对于测试非常方便。

选项是创建一个名为的文件import.sql,该文件将由Hibernate拾取,或者创建一个名为的文件data.sql,该文件将由Spring
JDBC拾取。这两个对我来说都很好。

但是,我想稍微分解一下项目,所以我目前有一个核心域模型,其中有一些方便的导入来配置核心数据,例如一些用户,这些数据随处可见。我还具有特定于功能的项目,在该项目中,重新使用相同的基础数据导入非常有用,但也可以导入特定于该功能的一些其他数据。

这是事情进展不太顺利的地方。

我找到了上一个问题的答案,其中PascalThivent提到hibernate.hbm2ddl.import_files自Hibernate
3.6.0.Beta1起,该属性可用于定义文件列表。鉴于我的项目正在导入4.3.1,最终,我认为也许可以使用。

所以我尝试将以下内容添加到我的Spring Boot中application.properties

spring.jpa.hibernate.hbm2ddl.import_files=/another-import.sql

和:

hibernate.hbm2ddl.import_files=/another-import.sql

不幸的是,这些都不会使导入运行。

所以我想知道我是否只是搞乱了上面的属性(很有可能)。还是我需要做些其他事情?

注意,作为一种解决方法,我发现Spring JDBC似乎data.sql在Hibernate
运行之后运行import.sql。因此,只要我不需要两个以上的导入,就可以使用import.sql基本数据,然后将特定于项目的导入放入中data.sql。我可以解决这个问题,但这并不是真正的解决方案。


阅读 495

收藏
2020-05-30

共1个答案

一尘不染

如果您确实要使用hibernate属性前缀,则将其与一起spring.jpa.properties.按原样添加到EntityManagerFactory。请参阅Spring
Boot参考指南中的此处

spring.jpa.properties.hibernate.hbm2ddl.import_files=file1.sql,file2.sql

但是,您也可以使用spring.datasource.dataspring.datasource.schema属性来发挥自己的优势。它们分别默认为dataschema。如您在DataSourceInitializer类中看到的。您还可以设置它们,它们采用逗号分隔的资源列表。

spring.datasource.data=classpath:/data-domain.sql,file:/c:/sql/data-reference.sql,data-complex.sql

之所以变得更好,是因为资源加载还允许使用ant样式的模式加载资源。

spring.datasource.data=/META-INF/sql/init-*.sql
spring.datasource.schema=/META-INF/sql/schema-*.sql
2020-05-30