在discussion at the Liquibase forums中,开发人员Nathan Voxland说Liquibase应该在每个变更集之后提交。我知道这是一个已有七年历史的线程,从那以后可能已经发生了很多变化,但是也许没有?
它应该在changeSet之后提交。在大多数数据库上,addColumn也会自动提交。
changeSet tag的文档可以解释为“在变更日志中的所有先决条件都成功之后就提交了”,这与7岁的职位相矛盾。
Liquibase尝试执行最后提交的事务中的每个changeSet,如果有错误,则回滚。某些数据库将自动提交语句,这会干扰此事务的设置并可能导致意外的数据库状态。因此,通常最好每个changeSet仅包含一个更改,除非您希望将一组非自动提交的更改应用为事务(例如插入数据)。
Liquibase是否仍然打算在每个变更集之后提交?
我正在将Liquibase 3.5.3与Netbeans / Maven结合使用,并使用Java代码启动更新。
我有一个main_changelog文件,它的唯一目的是将所有changelog包括在目录中。该目录中的两个(现在)更改日志分别具有两个更改集。这两个变更日志在其变更集之外均具有onFail =“ HALT”前提。
我的测试环境具有changelog_1成功的前提条件(因此将执行其中的所有变更集),而changelog_2前提条件失败。
我看到的是,在这个全新的数据库上,DATABASECHANGELOG表已创建但为空。变更集均未提交,大概是因为以后发生故障时需要先进行HALTS前提条件。我期待着HALT之前的所有变更集都能得到落实。
工作正常吗?还是虫子?
最佳答案
从liquibase文档中:
变更日志级别的前提条件适用于所有变更集,而不仅仅是
当前更改日志或其子更改日志中列出的那些。
因为您的前提条件是在变更日志级别,并且您已指定HALT,所以liquibase不会应用任何变更集。交易性从来没有真正发挥作用。
关于java - Liquibase变更集仅作为单个事务执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43531185/