迁移前的Flyway Maven init

时间:2013-07-21 08:50:06

标签: maven continuous-integration flyway

我正在尝试在我们服务器的多个(大约6个)实例上进行Flyway迁移。每个都是使用Bamboo从Git自动构建和部署的,所以我真的希望能够使用flyway:migrate Maven目标,以便每个服务器在下次部署时自行迁移。

但是我现在只是尝试Flyway,所以现有的数据库都没有init。我想知道我是否有可能以某种方式在Maven中指定Flyway应该init如果还没有,然后每次都migrate

migrate docs建议“如果不存在,Flyway将自动创建元数据表”,但事实上当执行flyway:migrate目标时,我收到错误:

  

无法执行目标com.googlecode.flyway:flyway-maven-plugin:2.2:在项目mutopia-server上迁移(默认):Flyway错误:com.googlecode.flyway.core.api.FlywayException:发现非空架构“公共”没有元数据表!首先使用init()初始化元数据表。 - > [帮助1]

2 个答案:

答案 0 :(得分:12)

我没有用Maven解决这个问题,因为我转而使用API version和Spring(这似乎在所有方面都更好)。

最初它有同样的问题 - bean的init-method="migrate"会在非空架构上失败,需要先调用init。然而,通过查看Flyway bean的来源,我注意到我可以将initOnMigrate设置为true,它会为我做。我不确定为什么这不在文档中;对于那些没有玩豆类的人来说,这并不是显而易见的。

无论如何,如果你还有一个关于Flyway抱怨的非空架构,applicationContext.xml中的bean应该是这样的:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
  <property name="dataSource" ref="dataSource" />
  <property name="initOnMigrate" value="true" />
</bean>

答案 1 :(得分:0)

如果您使用的是spring-boot,请将其放在prop / yml文件中

flyway.initOnMigrate=true

or
flyway:
  initOnMigrate: true

请注意:启用此功能小心,因为它会删除确保的安全网 - 如果配置错误,Flyway不会迁移错误的数据库!