Spring Boot с H2 запускает data.sql каждый раз, когда запускается веб-приложение, это нормально?

#spring-boot #h2

#весенняя загрузка #h2

Вопрос:

У меня есть приложение Spring Boot со встроенной базой данных H2 (настроенное для сохранения базы данных на диск).

У меня есть SQL-файл data.sql , который создает users таблицу, если она не существует, и вставляет admin учетную запись в users таблицу.

Он data.sql автоматически запускается при запуске приложения, и все работает нормально.

Проблема в том, что он запускается data.sql каждый раз при запуске приложения и создает еще admin одну запись в users таблице.

ВОПРОС: Как мне настроить его так, чтобы он запускался только data.sql тогда, когда база данных еще не существует?

Мои настройки в application.properties файле выглядят следующим образом, поэтому данные будут сохранены на диске, и запустите data.sql file для создания базы данных…

 spring.datasource.url=jdbc:h2:file:./data/myapplication-1.0
spring.jpa.hibernate.ddl-auto=update
 

Ответ №1:

Spring Boot с H2 запускает data.sql каждый раз, когда запускается веб-приложение, это нормально?

Да!это ожидаемое поведение. H2 предназначен для загрузки данных каждый раз, если существует какой-либо data.sql файл. Поскольку H2 является базой данных inmemory и ожидается, что данные не будут сохраняться после выхода из программы. Вот почему данные будут загружаться каждый раз. Если вы хотите какую-то настройку, вам нужно либо проверить ее программно, либо должна существовать логика (если значение существует, тогда обновите else insert) в data.sql файле.

Есть также простой способ: после инициализации данных вы устанавливаете новое значение конфигурации, чтобы данные не загружались из data.sql файла.

Вы можете использовать свойство spring.datasource.initialization-mode=never , чтобы каждый раз останавливать загрузку базы данных.

Ссылка: 79.3 Инициализировать базу данных