我正在使用Flyway更新DB模式。当前,模式的最新版本是3(最新的迁移文件名为v3__postgres.sql
)。
我是否正确理解了baseline-version
参数,还是遗漏了什么?
注意:我知道自Spring Boot2以来,参数名称空间已经更改为Spring.flyway.*
,但我使用的是Spring Boot1,所以这不是问题。
解决方案:我创建了一个自定义的FlywayMigrationStrategy
bean,在这个bean中,我手动检查Flyway是否已经引入数据库(通过检查迁移表是否存在)。如果不是,我运行baseline
命令。然后我像往常一样调用migrate
命令。
下面是Spring Boot配置:
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FlywayConfig {
@Autowired
private DataSource dataSource;
@Value("${flyway.table}")
private String flywayTableName;
@Value("${flyway.baselineVersionAsString}")
private String baselineVersion;
@Bean
public FlywayMigrationStrategy flywayMigrationStrategy() {
return flyway -> {
if (!isFlywayInitialized()) {
flyway.setBaselineVersionAsString(baselineVersion);
flyway.baseline();
}
flyway.migrate();
};
}
private boolean isFlywayInitialized() {
try (Connection connection = dataSource.getConnection()) {
DatabaseMetaData metadata = connection.getMetaData();
ResultSet result = metadata.getTables(null, null, flywayTableName, null);
return result.next();
} catch (SQLException e) {
throw new RuntimeException("Failed to check if Flyway is initialized", e);
}
}
}
我正在尝试使用flyway,但是我有一个不知道如何解决的情况: 当我应用STANDARD脚本时,我必须运行V1.0__create_table_TAB1.sql当我将脚本应用到customer1时,TAB1表是一个视图,因此我必须运行V1.0__creaate_view_TAB1_to_schema1.sql。 实际: 应始终应用sql_common文件夹的脚本,但不应应用 V1.0(创建表 TA
本文向大家介绍SpringBoot集成Flyway进行数据库版本迁移管理的步骤,包括了SpringBoot集成Flyway进行数据库版本迁移管理的步骤的使用技巧和注意事项,需要的朋友参考一下 Flyway简介 Flyway中的迁移(migrations)模式 Flyway对数据库的所有更改都称为 migrations(迁移) 。 migrations(迁移) 分为版本控制(Versioned)迁移
我们正在尝试将迁移作为.sql文件置于版本控制之下。开发人员将编写一个vn__*.sql文件,提交到版本控制,并且每5分钟运行一次的作业将自动迁移到开发和测试数据库。一旦更改被证明没有引起问题,其他人就会运行一个手动作业来在生产上运行迁移。 我的问题: 我有一个演示迁移,创建了几个表。我将v4__demotable.sql检查到PC上的版本控制中。 阅读文档时,开发人员似乎建议我应该创建一个新的v
每次更改DB结构时,我都使用时间戳创建一个新的迁移文件,以便按顺序执行,在一个干净的数据库中使用migrate命令(使用maven插件或命令行工具),它可以很好地工作,但在一个生产数据库中,使用相同的DB结构但添加了数据,我会得到以下错误:
我试图在Spring Boot应用程序中使用Flyway对嵌入式H2数据库进行迁移演示。 应用程序.属性 迁移-db/migration下的脚本(V2__create_shipwreck.sql) 信息7284---[main]o.f.c.i.s.jdbctableSchemaHistory:创建架构历史记录表:“public”.“flyway_schema_history” 信息7284---[
我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!