Spring-boot populate H2 database with schema.sql and data.sql

user3687431 picture user3687431 · Jun 13, 2016 · Viewed 21.2k times · Source

I set up Spring-boot to work with H2 in-memory database application.properties file is in the /config directory and it looks like, this file is processed

spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.path=/myconsole
spring.h2.console.enabled=true
spring.datasource.initialize=true
spring.datasource.schema=schema.sql
spring.datasource.data=data.sql

This file is processed and the console appears at /myconsole But the schema.sql and data.sql are not processed and db is empty. I placed schema.sql and data.sql files both under /config and /src/main/resources.

SQL language instructions are correct and I can populate the table using console input.

Another strange thing is even though i name db as

spring.datasource.url=jdbc:h2:mem:mydb

the spring console loads another database testdb

o.s.j.d.e.EmbeddedDatabaseFactory --- Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

How to load the H2 database correctly?

Answer

user3687431 picture user3687431 · Jun 21, 2016

Resolved the issue.

The spring boot app requires its ownd jdbc dependency

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

NON-boot dependency, that I had, is NOT enough alone:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
</dependency>

Without the "spring-boot-starter-jdbc" dependency "spring.datasource.url" settings in file "application.properties" are not processed. That file is actually processed, but not the jdbc settings. Spring boot will create its own testdb in the memory, which destroys the data after closing the application.