flyway迁移后运行data.sql文件

Posted

技术标签:

【中文标题】flyway迁移后运行data.sql文件【英文标题】:Run data.sql file after flyway migration 【发布时间】:2020-01-02 15:44:24 【问题描述】:

在我的 Spring Boot 项目中,我通过 flyway 维护 sql/query 版本。出于某种原因,我需要加载一些我不想在 flyway 版本上添加的初始数据。对于这些数据,我正在从flyway 脚本创建相关表。因此,要加载初始数据,我必须在 flyway 执行该脚本后运行我的 data.sql 文件。在 flyway 运行其脚本后,我如何确保运行我的 data.sql 文件? 请问有什么建议吗?

【问题讨论】:

问题解决了吗??我也很好奇,因为我不想在 flyway 文件中写入虚拟数据。只是像这样分离架构和数据 你可以试试下面写的解决方案。我从事不同的任务,因此无法尝试该解决方案。最初我做了一些手动任务来完成我的工作 我明白了,谢谢你告诉我:) 【参考方案1】:

data.sql 为嵌入式数据库自动运行。

对于 mysql,您需要将以下属性添加到您的 application.properties 文件中:

spring.datasource.initialization-mode=always

编辑:

要在 Flyway 运行迁移后应用,您可以使用 Flyway 的可重复迁移,因为它们总是最后应用。 https://flywaydb.org/documentation/migrations#repeatable-migrations

或者作为另一种选择,您可以使用CommandLineRunner 并以编程方式获取和执行您的 SQL 文件。例如:

import org.springframework.boot.CommandLineRunner;

@Component
public class DatabaseMigration implements CommandLineRunner 

  @Value("classpath:data.sql")
  private Resource dataFile;

  @Override
  public void run(String... strings) 
    // read file and execute with JdbcTemplate
    // ...
  

【讨论】:

感谢您的回复!我知道,但我的问题是如何控制运行脚本的顺序,即上述 flyway 脚本和 data.sql 脚本。

以上是关于flyway迁移后运行data.sql文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot 仅在一个配置文件中执行 data.sql

尝试在 sql-server 上迁移时 Flyway 挂起

为啥 flyway 会忽略我的 SQL 迁移文件?

Flyway 发现多个版本的迁移

flyway:每次迁移后运行的通用脚本

Flyway 未接收 Java 迁移