当前位置: 首页 > 知识库问答 >
问题:

用于基于spring boot的java应用程序的版本控制工具,类似Flyway

蔺霄
2023-03-14

问题描述
我有一个基于spring boot的应用程序,可以在第三方环境中创建实体<应用程序部署在prod上。我发现了一个bug,修复该bug需要对第三方prod实体上已经创建的实体进行更改<预期解决方案第三方产品环境实体正在修复运行基于java的脚本
我希望该脚本仅在第一次部署具有修复程序的应用程序版本时在prod中运行<我正在寻找Flyway为数据库实体提供的相同功能。我可以使用Flayway,但由于我的应用程序不使用数据库,我不想在非数据库应用程序上使用数据库版本控制工具,以避免将数据库版本控制概念与非数据库应用程序耦合<有没有提供我想要的功能的库/工具?

共有1个答案

能逸清
2023-03-14

在Spring应用程序中启动时执行代码的方法有很多。在这里查看其中的一些。应用程序每次启动时都会运行代码,因此为了只应用一次修复程序,您可以:

最简单的解决方案是部署带有修复程序的版本,让代码自动运行,然后在删除修复程序的情况下部署下一个版本。虽然不是很优雅,也不推荐它在简单的设置中只执行一次。不过,根据部署和运行时设置,这可能会有一些风险,甚至是不可能的。

您似乎正在寻找一些针对该修复程序多次执行的保护措施。例如,因为应用程序在部署后再次启动,这本质上是为了使多次执行成为可能或通过记住状态来阻止它们:

如果能够使修复操作幂等,只在初始应用程序中更改有问题的实体,则不需要任何工具。假设你创建的用户的电子邮件地址有错误,你会检查错误的电子邮件地址,只有当你发现你的修复尚未应用时才应用该修复。这样,修复程序可以运行多次而不会造成任何伤害。但并非所有运算都可以幂等。

这背后的想法是记住成功执行修复。Flyway为数据库迁移做到了这一点。同样,这取决于执行环境,以确定哪种类型的存储在这里是足够的。

  • 使用文件系统上的文件来标记完成。只有在文件丢失时才执行修复,然后再创建。当重新创建容器或在集群设置中时,此解决方案可能在容器化环境中失败
  • 使用数据库标记完成。您可以创建f.i.H2数据库,使用flyway创建空表,并在执行修复之前检查空表,然后在表中插入一行。使用h2数据库可以避免运行其他服务,但会受到与文件解决方案相同的限制
  • 使用诸如redis之类的外部服务来防止脚本的多次执行。您还可以使用此补丁来防止多个并发执行
 类似资料:
  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户

  • 问题内容: 嘿,我一直在用Java在Windows控制台中开发一个应用程序,并希望将其在线发布在所有console-graphics-glory中。 我可以使用一个简单的Web applet API来移植我的应用程序吗? 我仅使用基本的System.out和System.in功能,但是很高兴重建我的I / O包装器。 我认为,对于希望将其工作放在网上的任何新手Java开发人员而言,遵循这些思路将是

  • 如果我正在开发一个相当简单的基于Spring Boot控制台的应用程序,那么我不确定主执行代码的位置。我应该将其放置在public static void main(String[]args)方法中,还是让主应用程序类实现CommandLineRunner接口并将代码放置在run(String…args)方法中? 我将使用一个示例作为上下文。假设我有以下[基本]应用程序(编码为接口,Spring样

  • 在我们开始搞明白 Git 命令之前,你有必要先了解一下版本控制的基本流程。这本书会向你一步步地详细阐述各种不同的工作流程。但是首先还是让我们先来一起了解一下版本控制的最基本的流程。 版本控制中的最基本的模块就是 “仓库(Repository)”。 名词解释 仓库(Repository) 你可以把一个仓库想象成一个数据库,在那里你的版本控制系统存储了项目积攒的所有版本和元数据(metadata)。在

  • 问题内容: 我正在用Java编写一个简单的控制台应用程序(80x24),是否有等效的gotoxy(x,y)? 问题答案: 如果要通过gotoxy(x,y)将光标重新定位在控制台上特定的位置,则通常可以使用VT100控制代码来执行此操作。参见http://www.termsys.demon.co.uk/vtansi.htm。 做类似的事情 它将光标移动到控制台上的位置10,10。

  • 问题内容: 我正在寻找一种解决方案,可以从adb访问我们应用程序的内部状态以进行调试。我已经使用了dumpsys来获取系统服务的内部状态,所以现在我想知道是否可以将应用程序的接口公开到adb。到目前为止,我唯一想到的就是定期记录信息,然后只读取logcat,但如果可能的话,我希望能够通过adb直接与应用程序进行交互,因此问题是如何在我们的应用程序中实现此功能。 问题答案: 在您的覆盖方法中,例如: