Пружинная загрузка: как правильно заполнить базу данных? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение Spring Boot, и я хотел бы заполнить базу данных при первом запуске приложения, но не при каждом запуске приложения, а только в том случае, если данные еще не существуют.

Мое приложениеимеет файл data.sql , и он вставляет пользователей по умолчанию:

-- insert the administrator
INSERT INTO users(id, username, password_hash, email, first_name, last_name) VALUES
  (1, 'admin', 'comixed', 'email1@domain.com', 'ComixEd', 'Administrator'),
  (2, 'user', 'comixeduser', 'email2@domain.com', 'ComixEd', 'User')
;

-- insert the supported roles
INSERT INTO roles(id, name) VALUES
  (1, 'Administrator'),
  (2, 'User')
;

-- set the administrator roles
INSERT INTO users_roles(user_id, role_id) VALUES
  (1, 1),
  (1, 2),
  (2, 2)
;

Но Spring, очевидно, пытается запускать этот файл каждый раз, когда я запускаю приложение.И когда это происходит, возникает исключение, поскольку пользователи и роли уже находятся в базе данных.

Какой лучший способ сделать это?И, как вариант, как можно добавить новые начальные данные, если в будущем новые функции потребуют новых ролей и т. Д .?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Flyway - это то, что вы ищете https://flywaydb.org/

Это инструмент миграции баз данных, который можно использовать для создания и изменения баз данных в проекте.Он создает свою собственную таблицу в вашей схеме и добавляет в нее имя сценария и значение контрольной суммы.Во время загрузки приложения он сканирует сценарии, проверяет, находятся ли они в таблице и совпадают ли контрольные суммы.Это гарантирует, что файлы не изменятся, и все будет перенесено.

0 голосов
/ 23 мая 2018

Вы должны настроить его в файле application.properties.Добавьте эту строку, и она должна работать так, как вы хотите: spring.jpa.hibernate.ddl-auto = update

...