【发布时间】:2018-05-23 16:02:49
【问题描述】:
我有一个 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 显然在我每次启动应用程序时都试图运行这个文件。并且当它执行时会引发异常,因为用户和角色已经在数据库中。
有什么更好的方法来做到这一点?并且,如果将来新功能需要新角色等,有什么方法可以添加新的种子数据?
【问题讨论】:
-
也许您应该尝试使用更高级别的数据库迁移工具,例如 Flyway 或 Liquibase (relevant documentation)。
标签: database spring h2 seeding