我想用Flyway迁移数据库。在Grails (Spring)应用程序中,可以简单地定义一个自定义bean并根据该bean标记Hibernate SessionFactory。
flyway(Flyway) { bean ->
bean.initMethod = 'migrate'
dataSource = ref('dataSource')
locations = 'classpath:migration/db/mysql'
baselineOnMigrate = true
table = 'schema_version'
}
if (springConfig.containsBean('hibernateDatastore')) {
BeanDefinition beanToInlineWithFlyway = getBeanDefinition('hibernateDatastore')
def dependsOnList = ['flyway'] as Set
if (beanToInlineWithFlyway.dependsOn?.length > 0) {
dependsOnList.addAll(beanToInlineWithFlyway.dependsOn)
}
beanToInlineWithFlyway.dependsOn = dependsOnList as String[]
}在Micronaut中有实现同样的目标的方法吗?
我喜欢这样做的原因是:
在使用Flyway进行数据库迁移时,可以将所有DDL内容委托给Flyway,并将Hibernate jpa.default.properties.hibernate.hbm2dll.auto设置为validate。
jpa:
default:
properties:
hibernate:
hbm2ddl:
auto: validate天桥将在Hibernate之前启动,并将检查是否需要对数据库表进行任何迁移。之后,Hibernate启动并根据当前的JPA实体验证数据库模式。
发布于 2018-10-15 13:18:56
与其依赖脆弱的bean名称,不如定义一个实现BeanCreatedEventListener<DataSource>的bean。这将在创建DataSource bean之后运行,但在创建SessionFactory之前运行。
https://stackoverflow.com/questions/52671513
复制相似问题