我正在尝试使用 Flyway 为我的 Grails 3.2.8 应用程序运行迁移。根据https://flywaydb.org/documentation/plugins/grails只需要向 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://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html )可以完成一些额外的配置,因此我将其添加到 application.yml 中:
flyway:
enabled: true
locations: classpath:grails-app/conf/db/migration
sql-migration-prefix: V
sql-migration-suffix: .sql
我也尝试过不添加任何配置。我好像漏掉了什么?
最佳答案
flyway 的 spring-boot 自动配置默认依赖于自动配置时可用的一个 DataSource
bean。
但是,如果 gorm 定义了 grails DataSource
,则情况并非如此 - 启动自动配置后会发生这种情况。
一种可能的解决方案是定义一个“别名”DataSource
bean,充当 Flyway 数据源,委托(delegate)给 gorm/grails 定义的 bean。
@Configuration
class FlywayConfig {
@Autowired
DataSource dataSource
@Bean
@FlywayDataSource
DataSource flywayDataSource() {
return dataSource
}
}
示例:检查https://github.com/zyro23/stackoverflow-43211960/commit/c4063c900b7f96bc9ba65c84684a14a1992ca2a5
访问http://localhost:8080/dbconsole (jdbc:h2:mem:devDb
) 您应该看到 TEST
表已创建。
关于grails - 如何在 Grails3/Postgres 中配置 Flyway?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211960/