Spring Boot中的多个SQL导入文件

时间:2014-07-01 10:40:33

标签: hibernate spring-boot

Spring Boot reference manual之后,有几种方法可以在启动应用程序时导入数据。结合内存数据库,这对于测试非常方便。

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

但是,我想稍微分解一下我的项目,所以我目前有一个核心域模型,其中有一些方便的导入来配置核心数据,例如一些用户,它在任何地方都使用。我还有一些特定于功能的项目,它们可以重复使用相同的基础数据导入,但也可以导入一些特定于该功能的附加数据。

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

我找到an answer to a previous question,其中Pascal Thivent提到可以使用hibernate.hbm2ddl.import_files属性来定义文件列表,从Hibernate 3.6.0.Beta1开始。鉴于我的项目正在导入4.3.1.Final,我认为这可能是可用的。

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

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

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

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

所以我想知道我是否只是弄乱了上面的属性(非常可能)。或者还有其他我需要做的事情吗?

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

1 个答案:

答案 0 :(得分:43)

如果你真的想要使用hibernate属性前缀spring.jpa.properties.,那么它们将作为属性添加到EntityManagerFactory。请参阅Spring Boot参考指南中的here

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-style patterns加载资源。

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