如何将 Flyway 迁移与单个模式和多个项目一起使用

2023-12-19

如何管理处理相同数据库模式的多个项目。每个项目中的Flyway迁移脚本如果被其他项目修改则不允许启动。

例如:

我有一个带有 FlywayInitializer 类的 Spring Boot Project X。

   @PostConstruct
    public void migrateFlyway() {
        final Flyway flyway = new Flyway();

        flyway.setSchemas("schema1");
        flyway.setLocations("classpath:x.migration");
        flyway.migrate();
    }

我有一个子模块 Project Y 还有他自己的 FlywayInitializer 类

   @PostConstruct
    public void migrateFlyway() {
        final Flyway flyway = new Flyway();

        flyway.setSchemas("schema1");
        flyway.setLocations("classpath:y.migration");
        flyway.migrate();
    }

项目结构:

Project X
    src
      |
      main
          |
           java 
                FlywayInitializerX.java 
          |
           resources
               V1.0_create_tableX.sql
               V1.1_update_tableX.sql 

Project Y 
    src
      |
      main
          |
           java 
                FlywayInitializerY.java 
          |
            resources
               V1.0_create_tableY.sql 
               V1.1_update_tableY.sql 

我如何将相同的模式名称“schema1”与 Flyway 一起用于项目 X 和 Y?


EDIT:感谢@jesper_bk 帮助了我。这正是我想要的,这两个项目在同一模式中具有完全“独立的生命”。但现在我有以下问题:

第一个执行的项目 X 正确创建表,但如果项目 Y 启动,我会收到错误发现没有元数据表的非空模式。所以我必须将 BaselineOnMigrate 设置为 true。但如果我将 BaselineOnMigrate 设置为 true,则 Project Y 会跳过 sql 文件V1.0_create_tableY.sql并开始于V1.1_update_tableY.sql。我怎样才能达到第一个sql脚本V1.0_create_tableY.sql也为项目Y执行?

 @PostConstruct
    public void migrateFlyway() {
        final Flyway flyway = new Flyway();

        flyway.setBaselineVersionAsString("1");
        flyway.setBaselineOnMigrate(true);

        flyway.setSchemas("schema1");
        flyway.setLocations("classpath:y.migration");
        flyway.migrate();

    }

如果您可以接受在同一模式中具有完全“独立生命”的两个项目,则可以为这两个项目使用单独的版本表,即:

@PostConstruct
public void migrateFlyway() {
    final Flyway flyway = new Flyway();

    flyway.setSchemas("schema1");
    flyway.setLocations("classpath:x.migration");
    flyway.setTable("schema_version_y");
    flyway.migrate();
}

如果您希望它们使用相同的版本控制方案,那么最好将所有 SQL 脚本放在单独的第三个项目中,或者 - 甚至更复杂 - 有一个自动收集和枚举主项目中的 SQL 脚本的第三个项目。


关于你的第二个问题,baselineVersionAsString

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Flyway 迁移与单个模式和多个项目一起使用 的相关文章

  • SQL Android 错误:没有这样的表

    因此 每次我在位于 AddContacts 类中的 EditText 字段中输入数据时 我的对话框都会显示我已成功添加信息 但在日志 cat 中却显示没有这样的表 contactsTable 我认为错误出在我的数据库类中的 onCreate
  • SQL 分隔符上的逗号分隔列

    这是一个 split 函数 它可以应用为dbo Split sf we fs we 当我将字符串更改为列名时 它不起作用 例如dbo Split table columnName Select from dbo Split email pr
  • 从java运行sqlplus脚本的简单方法

    我有包含 sqlplus 特定脚本的 sql 文件 它包括 或 作为语句终止符 执行存储过程的 EXEC 等 我需要从 java jdbc 执行此脚本 而不需要 sqlplus sql ant任务 maven sql插件无法处理不同的终止符
  • 如何为“%abc%”搜索创建文本索引?

    我想对查询进行索引x like abc 如果我有一个如下表 create table t data varchar 100 我想创建一个索引以便能够有效地执行以下操作 select from t where contains abc 和这个
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 查询获取每条记录的最小日期[重复]

    这个问题在这里已经有答案了 我想获取表中每条记录的最小日期 该表具有多个带有一个主键的日期条目 看看我的桌子 CaseNo Entry date ABC 001 2 12 13 ABC 002 2 09 13 ABC 001 1 01 13
  • 单个查询删除并显示重复记录

    采访中提出的问题之一是 一张表有100条记录 其中 50 个 是重复的 是否可以用单个 查询删除重复记录 从表中以及选择和 显示剩余 50 条记录 这可以在单个 SQL 查询中实现吗 Thanks SNA 对于 SQL Server 你会使
  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • 使用显式创建表语句与 select into 创建表

    使用显式创建表语句和加载数据与选择数据之间是否存在性能差异 此示例仅显示 2 列 但问题是针对使用非常大的表 下面的示例也使用临时表 尽管我也想知道使用常规表的效果 我认为无论表格类型如何 它们都是相同的 临时表场景 Explicitly
  • 如何在postgresql中编写有关最大行数的约束?

    我认为这是一个很常见的问题 我有一张桌子user id INT 和一张桌子photo id BIGINT owner INT 所有者是一个参考user id 我想向表照片添加一个约束 以防止每个用户将超过 10 张照片输入数据库 写这个的最
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • 如何在“order by”中添加条件?

    我有一个带有输入参数的存储过程 现在根据这个参数 我的 order by 语句将发生变化 如果输入参数是 ID int类型列 则按ID排序 如果是 ProductType 则按产品类型排序 如果是 IssueDate 则应按问题日期排序 现
  • 迁移问题:MS SQL > MySQL:插入缓冲区内存

    我在使用 MySQL Workbench 上的内置迁移工具时遇到问题 我正在将一个非常大的数据库从 MS SQL 2014 迁移到 MySQL MS SQL 服务器本地部署在我的 Windows 8 1 桌面上 MySQL 服务器在我的网络
  • 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类

    我使用 appassembler maven plugin 生成的启动脚本有问题 我有一个基本的 spring boot 应用程序 只有一个类 SpringBootApplication public class ScriptDemoApp
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • 如何重置 SQL Server 中表的 IDENTITY 列? [复制]

    这个问题在这里已经有答案了 我怎样才能重置我的IDENTITY我已经填充的表中的列 我尝试过类似的方法 但它不起作用 WITH TBL AS SELECT ROW NUMBER OVER ORDER BY profile id AS RN
  • @Valid 不适用于弹簧休息控制器

    我将休息端点方法定义为 GetMapping get public ResponseEntity getObject Valid MyObject myObject 这会将请求参数映射到 MyObject MyObject 定义为 带有 l
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI

随机推荐

  • 检索 Dynamics 2011 中的选项集

    我正在使用此代码来检索全局选项集 var request new RetrieveOptionSetRequest Name OptionsetNameGoesHere var retrieveOptionSetResponse Retri
  • 在 eclipse 中使用 mahout 而不使用 Maven

    我真的不想使用maven 因为它看起来很麻烦 有没有办法只下载 mahout 并在我的 eclipse 项目中使用它 我从使用 Maven 得到的只是构建路径错误和数百万条警告 我一直在寻找一种方法来做到这一点 但人们似乎一直都在使用 Ma
  • 四舍五入至小数点后两位

    Math round doubleValue 100 100 0 有没有更好的方法将小数四舍五入到小数点后两位 如果您对小数位以及精确的小数值感兴趣 您通常应该使用java math BigDecimal http download ora
  • Zend 实例随机丢失

    我有一个在 zend 上运行的网站 最近它表示登录时会丢失会话变量 auth Zend Auth getInstance 有时似乎不起作用任何线索可能是什么问题 None
  • Realm 中具有惰性属性的复合键

    我发现了在 Swift 中使用带有复合主键的 Realm 的绝佳解决方案 https github com realm realm cocoa issues 1192 https github com realm realm cocoa i
  • 构建过程中ASP.NET Core设置托管环境

    我有一个ASP NET Core Api我在其中使用 appsettings environmentname json 配置文件 然后 我还有带有不同环境选项的相应 launchSettings json 文件 以便我可以使用任何特定的环境
  • 设计模式或代码味道,功能分解导致的非规范化数据

    我是以下的忠实粉丝http highscalability com http highscalability com 并且一直在我当前的开发中沿着功能边界分解我的应用程序 作为能够扩展服务器端 特别是数据库层 的途径 这涉及到将应用程序的不
  • 在 Reporting Services 中向条形图添加趋势线

    如何在 Reporting Services 2005 中向条形图添加趋势线 您必须从数据源创建趋势线的数据 从图表属性的数据选项卡上 选择趋势数据系列 单击编辑 然后在 编辑图表值 对话框中选择 外观 选项卡 选中 将数据绘制为线 框 使
  • MySQL 从 3 个表中选择不同的产品

    MySQL 从 3 个表中选择 我有这 5 个表 CREATE TABLE category c id int 6 NOT NULL AUTO INCREMENT name varchar 40 NOT NULL PRIMARY KEY c
  • 在 next js 13 中使用新的“app 目录”导入 bootstrap js 文件的位置

    我在下一个 js 13 中使用新的应用程序目录 当使用 bootstrap 下拉菜单时 只有 UI 可以工作 bootstrap 的 js 功能在其中不起作用 我尝试在layout tsx中导入js文件 但它抛出了这个错误 gt 文档未定义
  • 任何巧妙的方法来修复 LINQ 的“字符串或二进制数据将被截断”警告

    有没有一种巧妙的方法来确定哪个字段导致 字符串或二进制数据将被 LINQ 截断 我总是通过逐步调试器来手动完成此操作 但是对于使用 SubmitChanges 的批处理 我必须更改代码以插入单行以在一批行中找到罪魁祸首 我是否遗漏了某些东西
  • Android 未签名应用程序无法安装在设备上

    我的应用程序可以在模拟器上运行 并将其导出为未签名的应用程序 在我的手机设置 gt gt 应用程序 gt gt 检查了未知来源 我通过 USB 将 apk 下载到手机存储中 然后在文件管理器下 我发现存储了 apk 并点击安装按钮 它尝试安
  • $watchGroup 与 $watchCollection?

    有观察一组变量的 2 种方法 https docs angularjs org api ng type 24rootScope Scope在角度 但它们之间有什么区别呢 他们似乎都做浅表 是否存在其中一种明显优于另一种的情况 watchCo
  • App Engine 部署:获取应用程序的权限错误

    我们使用服务帐户通过 Travis 将我们的应用程序部署到 App Engine 在每个合并的 PR 中 Travis 从我们的 GitHub 存储库中提取代码 并提取Docker镜像 https github com hollowvers
  • 如何使用 onFieldSubscribed 单独验证 TextFormField

    我正在制作一个自定义 TextFormField 小部件 它将被多次使用 如何验证单个 TextFormField 而不验证同一列表 行 列中的任何其他 TextFormField Widget timeTextField TextEdit
  • 为什么绘图渲染的图表在 Mozilla 上不起作用

    当我尝试在 Mozilla Firefox 中打开与knitr 放在一起的 html 文档时 出现以下错误 该错误是由以下图形元素组成的结果plotly包裹 unknownError error occurred while process
  • 在 Internet Explorer 中意外调用 JQuery UI Autocomplete focus()

    我使用 JQuery UI 创建了一个简单的自动完成控件 我的输入字段有一个默认值 输入您的关键字 我已经设置了一个focus 当用户将焦点设置到要键入的输入字段时 该事件将清除输入 在 IE 中 当您键入并且菜单显示项目列表时 当从菜单项
  • 枚举的字符串表示(estring)?

    我需要一个枚举或类似的东西来做这样的事情 公共枚举 MyStringEnum StringValue Foo A Foo A StringValue Foo B Foo B 这可能吗 我的示例 我返回一个数据集 其值表示为 A B C D
  • 在 Clojure REPL 中使用自定义 Java 类

    在 Eclipse 中 使用 CCW 插件 我想将 clojure 文件加载到 REPL 中 问题是我有一个我自己的 java 类的 import 语句 但显然它不在我的类路径中 ns my clj ns import alg gen En
  • 如何将 Flyway 迁移与单个模式和多个项目一起使用

    如何管理处理相同数据库模式的多个项目 每个项目中的Flyway迁移脚本如果被其他项目修改则不允许启动 例如 我有一个带有 FlywayInitializer 类的 Spring Boot Project X PostConstruct pu