如何在Grails3 / Postgres中配置Flyway?

时间:2017-04-04 15:48:11

标签: grails flyway

我正在尝试使用Flyway为我的Grails 3.2.8应用程序运行迁移。根据{{​​3}},应该只需要为build.gradle添加依赖项:

dependencies {
  compile "org.flywaydb:flyway-core:4.1.2"
}

由于我希望Flyway生成我的架构,我还编辑了application.yml,没有生成域对象。如果我没有这个设置,Grails会生成我的表 - 而不是Flyway。

environments:
    development:
        dataSource:
            dbCreate: none

我还添加了一个迁移文件:

grails-app
  conf
    db
      migration
        V1__create_tables.sql

我还在这里阅读(https://flywaydb.org/documentation/plugins/grails)可以完成一些额外的配置,所以我将其添加到application.yml:

flyway:
  enabled: true
  locations: classpath:grails-app/conf/db/migration
  sql-migration-prefix: V
  sql-migration-suffix: .sql

我也试过没有任何我添加的配置。我好像错过了什么?

1 个答案:

答案 0 :(得分:3)

flyway的spring-boot自动配置默认依赖于自动配置时可用的单个DataSource bean。

REF。 https://github.com/spring-projects/spring-boot/blob/v1.5.2.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java#L130

然而,如果gorm定义了grails DataSource,那就不是这种情况 - 这是在启动autoconfig之后发生的。

一种可能的解决方案是定义一个"别名" DataSource bean充当flyway dataSource,委托给定义的gorm / grails。

@Configuration
class FlywayConfig {

    @Autowired
    DataSource dataSource

    @Bean
    @FlywayDataSource
    DataSource flywayDataSource() {
        return dataSource
    }

}

示例:检查https://github.com/zyro23/stackoverflow-43211960/commit/c4063c900b7f96bc9ba65c84684a14a1992ca2a5

访问http://localhost:8080/dbconsolejdbc:h2:mem:devDb)您应该看到TEST表已创建。