Grails-在DB迁移更改日志中调用脚本

Grails-在DB迁移更改日志中调用脚本,grails,liquibase,Grails,Liquibase,在使用DB迁移插件时,我遇到了一个有趣的问题。在我们的常规war部署中,我们需要一次又一次地运行某些脚本进行数据更新,以适应更改后的代码。虽然我们仍然可以在外部运行这些,但我们试图找到一种方法,将它们添加到DB迁移过程中 现在,其中一组脚本可以转换为迁移脚本并添加到grailsChange部分中,它们可以无缝运行。不过,还有另外一组脚本,由于以下几个原因,它们存在问题 这些脚本一次又一次地运行,因此每次运行时我们都必须不断更改id,因为我们不想复制代码,从而丢失原始更改 我们从命令行将参数传递给

在使用DB迁移插件时,我遇到了一个有趣的问题。在我们的常规war部署中,我们需要一次又一次地运行某些脚本进行数据更新,以适应更改后的代码。虽然我们仍然可以在外部运行这些,但我们试图找到一种方法,将它们添加到DB迁移过程中

现在,其中一组脚本可以转换为迁移脚本并添加到grailsChange部分中,它们可以无缝运行。不过,还有另外一组脚本,由于以下几个原因,它们存在问题

  • 这些脚本一次又一次地运行,因此每次运行时我们都必须不断更改id,因为我们不想复制代码,从而丢失原始更改
  • 我们从命令行将参数传递给这些脚本,通过上面的方法,我们必须将它们添加到脚本本身,这只会导致可维护性问题
  • 因此,我的问题是,是否有一种更优雅的方法从DB迁移脚本中触发外部grails或groovy脚本,以便每次需要运行脚本文件时,我们都可以使用更新的调用创建changelog,并用应用程序标记它

    我想前一段时间在stackoverflow上有一篇关于这个的帖子,但是我不能再找到它了。任何有关这方面的帮助都将不胜感激


    谢谢

    脚本是否可以添加到bootstrap.groovy中?这可能是最简单的。只需使用groovy.sql.sql来运行脚本

    另一个功能更强大、更灵活的选项是创建一个服务来运行脚本(groovy.sql.sql),并创建一个域类来跟踪已运行的脚本。您可以在bootstrap.groovy文件中触发该服务,该服务可以查看您设置的一些迁移域类,以查看脚本是否已运行。您甚至可以尽可能地保护该机制的前端,以上载脚本文件以在运行时执行

    让我知道你想要的更多细节,我可以试着在我的回复中更详细