我正在尝试在我们服务器的多个(大约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]
答案 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不会迁移错误的数据库!