小编典典

Spring Boot-加载初始数据

spring

我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的东西将用数据填充我的H2数据库。

例如,我有一个域模型“ User”,我可以通过转到/ users来访问用户,但是最初数据库中没有任何用户,所以我必须创建它们。无论如何,是否有自动用数据填充数据库的信息?

目前,我有一个由容器实例化并为我创建用户的Bean。

例:

@Component
public class DataLoader {

    private UserRepository userRepository;

    @Autowired
    public DataLoader(UserRepository userRepository) {
        this.userRepository = userRepository;
        LoadUsers();
    }

    private void LoadUsers() {
        userRepository.save(new User("lala", "lala", "lala"));
    }
}

但是我非常怀疑这是最好的方法。还是?


阅读 978

收藏
2020-04-11

共1个答案

小编典典

你只需在src / main / resources文件夹中创建一个data.sql文件,它将在启动时自动执行。在此文件中,你只需添加一些插入语句,例如:

INSERT INTO users (username, firstname, lastname) VALUES
  ('lala', 'lala', 'lala'),
  ('lolo', 'lolo', 'lolo');

同样,你也可以创建一个schema.sql文件(或schema-h2.sql)来创建你的模式:

CREATE TABLE task (
  id          INTEGER PRIMARY KEY,
  description VARCHAR(64) NOT NULL,
  completed   BIT NOT NULL);

尽管通常情况下你不必这样做,因为Spring引导已将Hibernate配置为基于你的实体为内存数据库创建架构。如果你确实要使用schema.sql,则必须通过将其添加到application.properties中来禁用此功能:

spring.jpa.hibernate.ddl-auto=none

可以在有关数据库初始化的文档中找到更多信息。

如果你使用的是Spring boot 2,则数据库初始化仅适用于嵌入式数据库(H2,HSQLDB等)。如果还要将其用于其他数据库,则需要更改spring.datasource.initialization-mode属性:

spring.datasource.initialization-mode=always

如果使用多个数据库供应商,则可以根据要使用的数据库平台将文件命名为data-h2.sql或data-mysql.sql。

为了使它起作用,你必须通过以下方式配置spring.datasource.platform属性:

spring.datasource.platform=h2
2020-04-11