【问题标题】:Defining a Micronaut bean that starts before the Hibernate SessionFactory定义在 Hibernate SessionFactory 之前启动的 Micronaut bean
【发布时间】:2018-10-05 18:36:47
【问题描述】:

我想使用 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 实体验证数据库模式。

【问题讨论】:

标签: micronaut


【解决方案1】:

您可以定义一个实现BeanCreatedEventListener<DataSource> 的bean,而不是依赖易碎的bean 名称。这将在创建 DataSource bean 之后但在创建 SessionFactory 之前运行。

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 2014-05-07
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2012-12-08
    • 2020-03-15
    相关资源
    最近更新 更多