Issue
I have a little problem. I have a Spring Boot Application and I will fill my H2 database with data. But I can not load the initial database data from the data-h2.sql file.
Model:
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "mood")
public class Mood {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mood_id")
private int id;
@Column(name = "name")
private String name;
public Mood(String name) {
this.name = name;
}
public Mood(int id, String name) {
this.id = id;
this.name = name;
}
}
data-h2.sql file:
INSERT INTO mood (name) VALUES ('Good');
application.properties:
spring.datasource.url=jdbc:h2:mem:mooddb;
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=a
spring.datasource.password=a
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create
spring.h2.console.enabled=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.defer-datasource-initialization=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false```
Sorry for the formatation, that is my first question :)
Solution
The problem is that spring expects to find a file with either the name schema.sql
or data.sql
in the classpath to load.
But your file is named data-h2.sql
so spring will not consider it, even if it is correctly placed in resources.
There are 2 solutions:
Rename the file into
data.sql
and be sure it is inside the resources folderDo not rename the file and use the following application property to inform spring about the name of the file that it should load
spring.sql.init.data-locations=classpath:data-h2.sql
Answered By - Panagiotis Bougioukos