Spring Boot中的多个SQL导入文件

Ste*_*eve 38 hibernate spring-boot

通过Spring Boot参考手册,我们可以通过几种方式在应用程序启动时导入数据.结合内存数据库,这对于测试非常方便.

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

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

这是事情不顺利的地方.

我找到了上一个问题的答案,其中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
Run Code Online (Sandbox Code Playgroud)

和:

hibernate.hbm2ddl.import_files=/another-import.sql
Run Code Online (Sandbox Code Playgroud)

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

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

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

M. *_*num 42

如果你真的想要使用hibernate属性前缀,那么spring.jpa.properties.就像它们作为属性一样添加EntityManagerFactory.见这里的春天启动的参考指南中.

spring.jpa.properties.hibernate.hbm2ddl.import_files=file1.sql,file2.sql
Run Code Online (Sandbox Code Playgroud)

但是,您也可以使用spring.datasource.dataspring.datasource.schema属性.它们默认分别为dataschema.正如您在DataSourceInitializer类中看到的那样.您也可以设置它们,并以逗号分隔的资源列表.

spring.datasource.data=classpath:/data-domain.sql,file:/c:/sql/data-reference.sql,data-complex.sql
Run Code Online (Sandbox Code Playgroud)

它变得更好,因为资源加载还允许使用ant样式模式加载资源.

spring.datasource.data=/META-INF/sql/init-*.sql
spring.datasource.schema=/META-INF/sql/schema-*.sql 
Run Code Online (Sandbox Code Playgroud)

  • 同样需要`classpath*:`甚至只需要本地打包文件.我想把我的东西分开更多,并使用Flyways像约定,所以我有`spring.datasource.data = classpath*:db/data/V*.sql` (3认同)