群集中的两个应用服务器启动LiquiBase更新(通过Grails)会发生什么?

时间:2013-09-11 01:13:59

标签: gorm grails-plugin liquibase

我计划通过grails数据库迁移插件使用LiquiBase。当我使用新版本的数据库模式启动两个服务器的集群,并且两个服务器都尝试启动模式升级时,会发生什么?

grails数据库迁移插件或LiquiBase本身是否具有针对并发升级尝试的保护?

1 个答案:

答案 0 :(得分:4)

除数据库表外,Liquibase还创建了一个databasechangelog和一个databasechangeloglock表来管理其状态。 databasechangelog包含有关您已经运行的迁移的信息,databasechangeloglock可以防止并发尝试运行迁移。

当第一个集群实例启动时,它将通过在databasechangeloglock表中插入一行来获取锁定,并运行任何缺少的迁移。当第二个启动时它将被阻塞,直到锁被释放,然后它将获得一个锁,因为不会有任何未运行的迁移,它将不会做任何事情。