在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?

Posted

技术标签:

【中文标题】在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?【英文标题】:How to load initial data in H2 when using flyway on spring boot application? 【发布时间】:2020-05-30 18:58:57 【问题描述】:

我正在创建一个使用 Flyway 进行迁移的 Spring Boot 应用程序,并希望将内存数据库用于开发配置文件,但问题是每次重新启动应用程序时数据都会丢失。因此,当我的应用程序在开发配置文件中启动时,我需要插入一些数据。我试图在 src/main/resource 上放置一个名为 data.sql 的文件,以便在应用程序启动时弹簧加载它,但它不起作用(它没有运行脚本)。我试图将INIT=runscript from 'classpath:data.sql' 放在 h2 url 中,但它试图在 Flyway 迁移执行之前运行它,因此表还不存在。谁能给我其他的方法吗?

我的应用程序.yml:

spring:
  datasource:
    url: jdbc:h2:mem:testdb;IFEXISTS=FALSE
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
  flyway:
    enabled: true

【问题讨论】:

根据 documentation,您可以创建一个开发配置文件并自定义 flyway pring.flyway.locations 并在该配置文件处于活动状态时运行脚本。您可以将初始化脚本作为迁移文件夹的一部分。 example. 还有一个 data migration property spring.flyway.init-sqls 看起来可能会有所帮助。从未尝试过数据迁移,因此发表评论,希望对您有所帮助。 @R.G 它有效。我在我的开发配置文件中配置了两个 spring.flyway.locations,一个带有我的负载数据。谢谢 太棒了!我可以添加它作为答案并且可以关闭这个问题吗? 是的,它解决了我的问题。 【参考方案1】:

根据 documentation ,可以配置特定于配置文件的自定义飞行路径 spring.flyway.locations。特定于配置文件的脚本在该配置文件处于活动状态时运行。因此,配置的开发配置文件将满足此要求。

初始化脚本可以作为迁移文件夹的一部分放置,该文件夹将运行并填充数据库。

可以找到一个例子here

【讨论】:

以上是关于在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在分叉进程上使用 gradle 任务启动 Spring Boot 应用程序?

在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序,而不是设置端点

如何在 Spring Boot 应用程序的同一个域类上同时使用 Spring Data JPA 和 Spring Data Elasticsearch 存储库?

如何在weblogic上运行spring boot

在两个不同端口上具有两个服务的 Spring Boot 应用程序

使用 nginx 作为代理的 Spring Boot 应用程序部署在 Heroku 上