使用 spring boot 导入数据

Ale*_*lex 8 spring-boot

我的 flyway 和 spring-boot 工作正常,但我似乎无法spring.datasource.data正确连接。

如果我有一个文件src/main/resources/db/seeds/one_project.sql. 我在我的application.properties文件中尝试了以下内容。

# fully qualified path
spring.datasource.data=file:///fully/qualified/path/db/seeds/one_project.sql

# classpath specific
spring.datasource.data=classpath:/db/seeds/one_project.sql

# relative path
spring.datasource.data=/db/seeds/one_project.sql
Run Code Online (Sandbox Code Playgroud)

我实际上可以开始工作的唯一一件事就是复制one_project.sqlsrc/main/resources/schema.sql(即使将其复制到src/main/resources/data.sql也不起作用。

文档中是否有我完全遗漏的内容?

我一直在关注这里的文档。

在此先感谢您的帮助!

sta*_*one 6

卡在那很长一段时间。我的上下文:Spring Boot 2.2.6 + Hibernate 5.4 + classpath(src/main/resources) 中的 script.sql。要在应用程序启动时执行脚本,我需要在 application.properties 中添加:

spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=update
spring.datasource.data=classpath:script.sql
Run Code Online (Sandbox Code Playgroud)

并删除 script.sql 中实际代码和 BETWEEN 代码之前的所有注释。或者,如果您需要注释,请SELECT 1;在注释行之后的下一行添加。因为注释后的下一行似乎被忽略了。无论您粘贴的注释行后有多少换行符。


dun*_*nni 5

如我所见,如果以下条件之一为真,Spring Boot 将执行数据脚本:

  • schema.sql 脚本存在并启用初始化(spring.datasource.initialize=true)
  • 如果使用 JPA 和 Hibernate 并使用 Spring Boot 自动配置:属性 hibernate.hbm2ddl.auto 存在(该值无关紧要,您可以给它一个空字符串或只是“验证”)并启用初始化(spring.hibernate.hbm2ddl.auto)。数据源.初始化=真)。


Zer*_*leb 4

长话短说

Create a blank schema.sql if you want your data.sql to run.
Also as stated in a comment it must execute one line such as `select 1` or `select 1 from dual`
Run Code Online (Sandbox Code Playgroud)

你说

我唯一能真正开始工作的就是将 one_project.sql 复制到 src/main/resources/schema.sql

这让我觉得很明显你没有 schema.sql

所以只需创建一个空白的schema.sql,然后它就会运行one_project.sql

源代码-https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java

正如您所看到的,它收集架构位置,如果架构资源为空,则它不会继续运行 data.sql (这是 runSchemaScripts() 方法的顶部)

  • 这不再有效,因为 Spring 抛出 schema.sql 不能为空的异常 (2认同)