gpt4 book ai didi

Spring Boot - 加载初始数据

转载 作者:IT老高 更新时间:2023-10-28 13:01:00 28 4
gpt4 key购买 nike

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

例如,我有一个域模型“用户”,我可以通过转到/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"));
}
}

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

最佳答案

您可以在 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 boot 已经将 Hibernate 配置为根据您的实体为内存数据库创建架构。如果您真的想使用 schema.sql,则必须通过将其添加到 application.properties 来禁用此功能:

spring.jpa.hibernate.ddl-auto=none

更多信息可以在关于 Database initialization 的文档中找到。 .


如果您使用的是 Spring Boot 2,则数据库初始化仅适用于嵌入式数据库(H2、HSQLDB...)。如果你也想将其用于其他数据库,则需要更改初始化模式属性:

spring.sql.init.mode=always # Spring Boot >=v2.5.0
spring.datasource.initialization-mode=always # Spring Boot <v2.5.0

如果您使用多个数据库供应商,您可以将文件命名为 data-h2.sqldata-mysql.sql,具体取决于您要使用的数据库平台使用。

要使其工作,您必须配置数据源平台属性:

spring.sql.init.platform=h2 # Spring Boot >=v2.5.0
spring.datasource.platform=h2 # Spring Boot <v2.5.0

关于Spring Boot - 加载初始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38040572/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com