gpt4 book ai didi

java - 在 Flyway Java API 中使用 SQL 迁移文件

转载 作者:行者123 更新时间:2023-11-29 12:43:07 25 4
gpt4 key购买 nike

我不确定这是否可行,但我正在尝试通过 Flyway Java API 以编程方式加载保存在 SQL 文件中的迁移。我有一个 SQL 文件保存在基类路径中(现在为了简单起见)作为 V1__Initial_version.sql 和一个简单的表创建语句:

CREATE TABLE test_user (
name VARCHAR(25) NOT NULL, PRIMARY KEY(name)
);

然后在我使用的Java程序中

Flyway flyway  = new Flyway();
flyway.setDataSource(jdbc_url, user, password);
int migrations = flyway.migrate(); // Just to check the # of migrations applied

我看到 ClassPathScanner 通过类路径查找有效迁移,但它似乎忽略了 sql 迁移文件。当我从命令行调用 flyway migrate 时,相同的 sql 迁移文件工作正常。我创建了一个 java 类并继承自 JdbcMigrations 类,而 ClassPathScanner 很好地选择了它。我需要做什么才能让 Java ClassPathScanner 拾取 .sql 文件并将其用作有效迁移?

更大的图景

也许我一开始就做错了,所以我会添加我正在尝试做的事情。我正在尝试设置一个我可以在测试之间使用、核对和重建的测试数据库。 IE。 TestA 在表中输入一些东西,然后预测试函数将清理数据库并重置它,然后 TestB 将有一个干净的数据库和空表来执行它的测试。我在预测试函数中使用 flyway.clean() 和 flyway.migrate() 但它破坏了 schema_version 表以及其他所有内容,然后迁移不会从以前的基线重建。

感谢任何帮助!谢谢!

最佳答案

不确定为什么它没有接收到您的任何迁移。也许他们需要在特定目录中?您需要检查 src 代码以了解它为什么不选择您的文件进行迁移。

关于大局:

我们通常在运行构建和测试用例之前使用 flyway:migrate 迁移测试数据库。我们使用 DBUnit、Spring 测试或类似的单元测试框架,它们允许使用数据预测试数据库设置。该结构在测试期间不应更改,因此不需要数据库迁移。 Arquillian 对于运行测试之前的数据库初始化也非常有用,请参见此处 https://github.com/arquillian/arquillian-extension-persistence

编辑 1所以我创建了一个小例子

import org.flywaydb.core.Flyway;
public class TestClass {
public static void main(String args[]) {
Flyway flyway = new Flyway();
for (String location : flyway.getLocations()) {
System.out.println(location);
}
flyway.setDataSource("jdbc:h2:~/test", "sa", "");
System.out.println("Result: " + flyway.migrate());
}
}

将sql文件放入src/main/resources/db/migration并运行。它可以很好地进行 sql 迁移。如果你想把sql放在不同的目录,使用setLocations()

classpath:db/migration
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.util.VersionPrinter printVersion
INFO: Flyway 4.0.3 by Boxfuse
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.dbsupport.DbSupportFactory createDbSupport
INFO: Database: jdbc:h2:~/test (H2 1.4)
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.command.DbValidate validate
INFO: Successfully validated 1 migration (execution time 00:00.009s)
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.command.DbMigrate migrate
INFO: Current version of schema "PUBLIC": << Empty Schema >>
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.command.DbMigrate applyMigration
INFO: Migrating schema "PUBLIC" to version 1.1 - Initial version
Result: 1
Aug 30, 2016 10:48:41 PM org.flywaydb.core.internal.command.DbMigrate logSummary
INFO: Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.024s).

关于java - 在 Flyway Java API 中使用 SQL 迁移文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39235930/

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