定义一个在 Hibernate SessionFactory 之前启动的 Micronaut bean
Defining a Micronaut bean that starts before the Hibernate SessionFactory
我想用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
Flyway 将在 Hibernate 之前启动,并将检查是否有必要迁移数据库表。之后,Hibernate 启动并根据当前 JPA 实体验证数据库模式。
与其依赖脆弱的 bean 名称,不如定义一个实现 BeanCreatedEventListener<DataSource>
的 bean。这将 运行 在创建 DataSource
bean 之后但在创建 SessionFactory
之前。
我想用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
Flyway 将在 Hibernate 之前启动,并将检查是否有必要迁移数据库表。之后,Hibernate 启动并根据当前 JPA 实体验证数据库模式。
与其依赖脆弱的 bean 名称,不如定义一个实现 BeanCreatedEventListener<DataSource>
的 bean。这将 运行 在创建 DataSource
bean 之后但在创建 SessionFactory
之前。