gpt4 book ai didi

java - 如何在Flyway中做部分迁移进行测试?

转载 作者:行者123 更新时间:2023-12-05 07:02:06 26 4
gpt4 key购买 nike

我正在尝试编写一个测试来验证我的新迁移脚本(位于 src/main/resources/db/migration)是否在我的 Postgres 数据库中的现有数据上正确执行。

我有 5 个迁移脚本,其中第 2 个创建包含一些列的初始 Users 表,第 5 个添加到现有的 Users 表中,包含一个新列和默认值该新列的值。

首先,我只想迁移到脚本,以便 Users 表的初始版本,然后我将正常填充它,最后,通过运行第 5 个脚本完成迁移,然后检查第 5 个脚本是否实际更新了现有数据。但是,我不确切地了解如何只迁移到某个版本,然后再迁移到其余版本...

这是我目前所拥有的:

实际测试

@RunWith(SpringRunner.class)
@SpringBootTest
class MigrationTest extends ComponentTest {

private static final String USER_ID = "1337";

@Autowired
private InitialUserRepository initialUserRepository;
@Autowired
private UserRepository userRepository;

@Autowired
private Flyway flyway;

@Transactional
@Test
public void test() {

flyway.baseline(); // default 1
flyway.migrate(); // this will migrate to the final script/version where it will add the new column
// replace the above line, flyway.migrate(), with a partial migration to version 2 ONLY, something like flyway.migrate(2)

var initialUserMappingEntity = new InitialUserMappingEntity(USER_ID, "some other data");
initialUserRepository.saveAndFlush(initialUserMappingEntity);

var user = initialUserRepository.findById(USER_ID);
assertTrue(user.isPresent());

// complete the full migration here, something like flyway.migrate(5)

var updatedUser = userRepository.findById(USER_ID);
assertTrue(updatedUser.isPresent());
assertNotNull(updatedUser.get().getNewColumn());
}
}

EmptyMigrationStrategyConfig

@Configuration
public class EmptyMigrationStrategyConfig {

@Bean
public FlywayMigrationStrategy flywayMigrationStrategy() {
return flyway -> {
// do nothing
};
}
}

应用程序测试.yaml

spring:
flyway:
locations: classpath:/db/migration

最佳答案

您正在寻找 flyway.target 选项(api 中的 .target())。参见 https://flywaydb.org/documentation/commandline/migrate#target .

此配置参数设置要迁移到的版本。因此,如果您有 3 个迁移 V1__、v2__、v3__ 使用 flyway.target=2 仅迁移 V1__v2__.

关于java - 如何在Flyway中做部分迁移进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63670781/

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