Spring Boot - 加载初始数据

2024-01-10

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

例如,我有一个域模型“用户”,我可以通过转到 /users 来访问用户,但最初数据库中不会有任何用户,因此我必须创建它们。有没有办法自动向数据库填充数据?

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

Example:

@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"));
    }
}

但我非常怀疑这是最好的方法。或者是吗?


您可以创建一个data.sql文件在你的src/主/资源文件夹,启动时会自动执行。在此文件中您可以添加一些插入语句,例如:

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

同样,您可以创建一个模式.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

更多信息可以在有关的文档中找到数据库初始化 http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html.


如果您正在使用春季启动2,数据库初始化仅适用于嵌入式数据库(H2、HSQLDB,...)。如果您也想将其用于其他数据库,则需要更改初始化模式属性:

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

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

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

spring.sql.init.platform=h2 # Spring Boot >=v2.5.0
spring.datasource.platform=h2 # Spring Boot <v2.5.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot - 加载初始数据 的相关文章

随机推荐

  • Google Admob Android:仅在一台设备上运行

    我在我的 Android 应用程序中设置了一个 admob adview 清单
  • 修改成员时不调用 C# 对象 Setter

    我有以下包装类 public class Wrapper public int Member 在一个单独的班级中 我有以下内容 public class ContainerClass private Wrapper data public
  • 我的谷歌地图被切断了,我想知道为什么? JavaScript,V

    It s kinda hard to explain so I uploaded a screen shot of the issue 正如您所看到的 尽管地图上有 div 不动产 这是实际大小 但它只显示了地图的 1 6 这个小部件可以调
  • 如何在 Java 中设置标签的颜色(彩色文本)?

    如何设置标签文本的颜色 myLabel setText Text Color Red myLabel 我可以在一个标签上使用两种不同的颜色吗 例如这里 The Text Color 变黑并且 Red 变红 对于单色前景色 label set
  • 为什么 (1 == 2 != 3) 在 Python 中计算结果为 False?

    为什么 1 2 3 评估为False在Python中 同时两者 1 2 3 and 1 2 3 评估为True 这里使用什么运算符优先级 这是由于运营商的连锁现象 https docs python org 3 reference expr
  • 为什么我可以使用类型别名声明 const 引用?

    我有一个简单的问题 据我所知 我可以声明const指向某种数据类型的指针或指向常量数据类型的指针 但我只能声明对常量数据类型的引用 而不能声明对数据类型的常量引用 事实上 引用已经是常量 因为它不能反弹到另一个对象 所以当我尝试创建一个co
  • 当多个文件作为参数传递给 perl cli 时,Perl 中文件的行号

    In awk如果我给出多个文件作为参数awk 有两个特殊变量 NR 对应于所有文件中所有行的行号 FNR 当前文件的行号 我知道在 Perl 中 对应于NR 所有文件中的行中的当前行 有什么可以媲美的FNRPerl 中的 AWK 也有吗 假
  • PBSPro qsub 输出错误文件定向到名称中包含 jobid 的路径

    我正在使用 PBSPro 并尝试使用 qsub 命令行提交作业 但似乎无法按照我想要的方式命名输出和错误文件 目前使用 qsub N subjobname short o path o PBS JOBID e path e PBS JOBI
  • VSTS 持续集成触发器不起作用

    我很确定这个设置在某一时刻对我们来说是有效的 我对我们的构建进行了一些更改以反映一些操作更改 但现在 CI git 分支触发器不起作用 我正在尝试获取它 以便当 PR 合并到 master 时它会触发发布构建 我可以手动触发此构建 但在从
  • 从 csproj 引用 ASP.NET xproj

    我正在使用 Visual Studio 中的新 类库 NuGet 包 模板之一 并且我想为其创建一个 xUnit 测试库 问题是 当我创建新的 csproj 库并尝试引用 xproj 包时 Visual Studio 说 The refer
  • 使用 c++ 中的 boost 进程库输出

    我使用升压过程并使用默认代码主要教程页面 http www highscore de boost process process tutorials html 我已经运行了这段代码 但它没有打印任何输出 include
  • BlackBerry - 在位图字段上调用单击事件

    谁能帮我解决以下问题 我正在为黑莓制作一个应用程序 从一个位图字段我必须通过单击该位图字段来调用一个新屏幕 我想要相同的代码 如何通过单击位图字段来调用新屏幕 我正在使用黑莓 JDE 4 7 尝试使 BitmapField 可聚焦 Bitm
  • Excel 中具有多个条件的 CUBESET() 函数

    我正在尝试在 Excel 中创建 CUBESET 函数 但我不知道如何使用多个条件过滤它同一维度内 这就是我迄今为止所遵循的一个标准 示例1 CUBESET ThisWorkbookDataModel Facebook Bucket C A
  • 有效地找到大型数组中的最低有效设置位?

    我有一个巨大的内存块 位向量 其大小N一个内存页内的位 考虑N平均为 5000 即 5k 位来存储一些标志信息 在某个时间点 超频繁 关键 我需要找到整个大位向量中的第一个位集 现在我对每个 64 个单词执行此操作 即在 builtin c
  • 如何自定义实现asp.net身份的UpdateAsync方法?

    我正在执行自定义 asp net 身份 而不是使用 asp net 内置表 我已成功创建用户并实现自定义CreateAsync 现在我想用新的加密密码更新用户 所以我不知道如何提供自定义实现UpdateAsync method 这是我的桌子
  • 使用 Guice 和 JDBC 进行事务 - 解决方案讨论

    在我的应用程序中 我需要将纯 JDBC 与 Guice 一起使用 但是 Guice 不提供任何内置支持来管理事务 guice persist只提供基于JPA的支持 我无法使用 所以我尝试实现一个简单的解决方案来使用 Guice 和 JDBC
  • 如何在两个 Visual C++ 项目之间共享相同的产品版本?

    我有 2 个 Visual C 项目 它们都有一个 RC 文件 其中定义了现场产品版本 我如何才能使这两个项目从全球范围内获取此版本 全局RC文件或者有什么解决办法 对我来说最有效的是添加两个 解决方案项目 一个是 h 文件 defines
  • 在内核空间模拟鼠标点击

    我试图在内核空间中模拟键盘和鼠标点击 因此它们将无法在其他应用程序中被阻止 与用户空间模拟相反 为了实现这个目标 我发现this https github com jasonpang Interceptor库是 C 的包装器this htt
  • Mongoose 将 req 对象传递给中间件

    我正在为猫鼬编写一个中间件 它使用 pre 为每个查找对象执行query hook postSchema pre query function query next I want to access the req user object
  • Spring Boot - 加载初始数据

    我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么 我正在寻找的是能够用数据填充我的 H2 数据库的东西 例如 我有一个域模型 用户 我可以通过转到 users 来访问用户 但最初数据库中不会有任何用户 因此我必须创建它们 有没有