Importing Data with spring boot

The way I got it working was by using the following properties

 spring.datasource.data=classpath:prod.sql
 spring.datasource.url=jdbc:mysql://localhost:3306/DATABASENAME?useSSL=false
 spring.datasource.username=USERNAME
 spring.datasource.password=PASSWORD
 spring.datasource.initialization-mode=always 

spring.datasource.initialization-mode=always seems to do the trick


Stuck at that quite long. My context: Spring Boot 2.2.6 + Hibernate 5.4 + script.sql in classpath(src/main/resources). To make script executed at application start I was need to add in application.properties:

spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=update
spring.datasource.data=classpath:script.sql

And remove all comments BEFORE the actual code and BETWEEN code in script.sql. Or if you need comments, add SELECT 1; on the next line after the line with comment. Because the next line after commented one seems to be ignored. No matter how many line breaks after line with comment you paste.


As i can see it, Spring Boot executes the data scripts if one of the following conditions is true:

  • The schema.sql script is present and the initialization is enabled (spring.datasource.initialize=true)
  • If JPA and Hibernate is used and autoconfigured with Spring Boot: The property hibernate.hbm2ddl.auto is present (the value doesn't matter, you can give it an empty string or just "validate") and the initialization is enabled (spring.datasource.initialize=true).

TL;DR

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`

You said

The only thing I can actually get to work is to copy one_project.sql to src/main/resources/schema.sql

Which makes me think it's evident you don't have a schema.sql

So just create a blank schema.sql and then it will run one_project.sql

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

As you can see it gathers the schema locations and if schema resources are empty then it doesn't continue to run the data.sql (this is at the top of the runSchemaScripts() method)

Tags:

Spring Boot