Java 如何在Spring应用程序中处理生产数据库上的架构升级

Java 如何在Spring应用程序中处理生产数据库上的架构升级,java,hibernate,spring,jakarta-ee,Java,Hibernate,Spring,Jakarta Ee,使用Spring framework和hibernate在生产数据库上执行升级过程的最佳实践是什么?您可以尝试使用。它确实支持您可以尝试使用的。它确实支持我的方法(我们提供的产品可能需要从5、10、15等旧版本升级) 为架构设置版本,并在当前架构旁边保留每个版本的副本 在数据库表中安装更新到的存储版本时 编写一个安装程序流程,计算从当前db版本->软件最新版本开始的升级步骤 提供一种方法,用于为每个版本添加自定义升级步骤,以便将表从旧模式迁移到新模式 使所有自定义升级步骤都重新命名,因为您无法

使用Spring framework和hibernate在生产数据库上执行升级过程的最佳实践是什么?

您可以尝试使用。它确实支持您可以尝试使用的

。它确实支持

我的方法(我们提供的产品可能需要从5、10、15等旧版本升级)

  • 为架构设置版本,并在当前架构旁边保留每个版本的副本
  • 在数据库表中安装更新到的存储版本时
  • 编写一个安装程序流程,计算从当前db版本->软件最新版本开始的升级步骤
  • 提供一种方法,用于为每个版本添加自定义升级步骤,以便将表从旧模式迁移到新模式
  • 使所有自定义升级步骤都重新命名,因为您无法处理其中一些内容(DDL)更改
选择性地

  • 有一个哑模式更新程序,可以更新您的表,但不能更新数据,即重命名一个列,它将无法确定如何处理旧数据(丢失)
  • 使用自定义升级步骤可以在哑模式更新程序之前和之后执行步骤,第一个步骤是迁移哑模式更新程序将丢失/中断的重要数据,第二个步骤是在模式更新后修复任何数据
    • 我的方法(我们提供的产品可能需要从5、10、15等旧版本升级)

      • 为架构设置版本,并在当前架构旁边保留每个版本的副本
      • 在数据库表中安装更新到的存储版本时
      • 编写一个安装程序流程,计算从当前db版本->软件最新版本开始的升级步骤
      • 提供一种方法,用于为每个版本添加自定义升级步骤,以便将表从旧模式迁移到新模式
      • 使所有自定义升级步骤都重新命名,因为您无法处理其中一些内容(DDL)更改
      选择性地

      • 有一个哑模式更新程序,可以更新您的表,但不能更新数据,即重命名一个列,它将无法确定如何处理旧数据(丢失)
      • 使用自定义升级步骤可以在哑模式更新程序之前和之后执行步骤,第一个步骤是迁移哑模式更新程序将丢失/中断的重要数据,第二个步骤是在模式更新后修复任何数据

      您也可以在Flyway上享受很多:


      比液化简单得多。

      您也可以在Flyway享受很多:


      比液化要简单得多。

      为此液化岩石。。。你在不到一分钟的时间里就回答了这个问题。应该有一种方式来分享荣耀:)为这个液化岩石。。。你比我快了一分钟就回答了这个问题。应该有一种方式来分享荣耀:)@aweigold-为什么?如果版本升级有两个步骤,第一个步骤成功,第二个步骤失败,会发生什么?我需要让第一个检测到它与此无关。您应该跟踪已应用的更改,或者确定是否需要应用更改。(顺便说一句,Liquibase可以做到这一点;-))检查您的所有更改是否都已应用,在每个更改级别上进行检查的难度与多次强制执行检查的难度相同,直到检查成功为止。只是一遍又一遍地重复同样的改变是一种恶作剧。公平的说,让我重申一下我所说的“重新命名”是什么意思。如果升级步骤在应用后再次运行,它应该检测到它已经进行了更改,并且什么也不做。@aweigold-为什么?如果版本升级有两个步骤,第一个步骤成功,第二个步骤失败,会发生什么?我需要让第一个检测到它与此无关。您应该跟踪已应用的更改,或者确定是否需要应用更改。(顺便说一句,Liquibase可以做到这一点;-))检查您的所有更改是否都已应用,在每个更改级别上进行检查的难度与多次强制执行检查的难度相同,直到检查成功为止。只是一遍又一遍地重复同样的改变是一种恶作剧。公平的说,让我重申一下我所说的“重新命名”是什么意思。如果升级步骤在应用后再次运行,则应检测到它已进行更改,而不执行任何操作。其他一些选项:和。选中此复选框,然后选择其他选项:和。检查这个