5

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

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

迁移文档建议“如果元数据表不存在,Flyway 将自动创建它”,但实际上在flyway:migrate执行目标时,我得到了错误:

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

4

2 回答 2

12

我没有用 Maven 弄明白,因为我切换到使用 Spring 的API 版本(这似乎在所有方面都更好)。

最初它有同样的问题 - beaninit-method="migrate"在非空模式上会失败,需要init首先调用。然而,通过查看 Flyway bean 的来源,我注意到我可以设置initOnMigrate为 true,它会为我做这件事。我不确定为什么这不在文档中;对于不经常玩豆子的人来说,这并不是很明显。

无论如何,如果您还有一个 Flyway 抱怨的非空模式,则 beanapplicationContext.xml应如下所示:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
  <property name="dataSource" ref="dataSource" />
  <property name="initOnMigrate" value="true" />
</bean>
于 2013-07-23T07:41:31.183 回答
0

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

flyway.initOnMigrate=true

or
flyway:
  initOnMigrate: true

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

于 2017-02-10T18:25:28.010 回答