#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
, чтобы каждый раз останавливать загрузку базы данных.