gpt4 book ai didi

spring - 使用 GORM 6.1.x 在 Grails 3.3 中确定 Springs bean 实例化顺序

转载 作者:行者123 更新时间:2023-12-02 14:22:19 24 4
gpt4 key购买 nike

我正在使用一个使用 GORM 6.1.6.RELEASE 的 Grails 3.3 应用程序, Spring Boot 1.5.4.RELEASE和 Spring Core 4.3.9.RELEASE在幕后。我试图声明一个在 Hibernate 开始验证底层数据库模式之前被初始化的 Spring bean。

这是我喜欢做的事情。我想将我的 Flyway 注册为 Spring bean 并注入(inject) dataSource bean 进去。为了在 Hibernate 开始验证当前数据库模式之前运行 Flyway,我添加了我的 flyway bean 作为对 sessionFactory 的依赖项 bean 。顺序如下:

  • dataSource bean
  • flyway bean
  • hiberateDatastore bean

  • GORM 6.1 使用 org.grails.orm.hibernate.HibernateDatastore作为一个 Spring bean 来初始化 Hibernate ORM 和数据库。 sessionFactory bean 声明 hibernateDatastore#getSessionFactory作为工厂类。
    因此 hibernateDatastore总是先创建。

    在 Grails 3.3 中创建自定义 Spring bean 的方法是什么,该 bean 必须在与数据库的连接可用但在 Hibernate 内容被初始化之前运行?

    在以前的 Grails 3.x 版本中,可以在 resources.groovy 中声明它。像这样。
    beans = {

    if (Environment.current == Environment.PRODUCTION) {
    flyway(Flyway) { bean ->
    bean.initMethod = 'migrate'
    dataSource = ref('dataSource')
    locations = 'classpath:db/h2'
    baselineOnMigrate = true
    }

    BeanDefinition sessionFactoryBeanDef = getBeanDefinition('hibernateDatastore')

    if (sessionFactoryBeanDef) {
    def dependsOnList = ['flyway'] as Set
    if (sessionFactoryBeanDef.dependsOn?.length > 0) {
    dependsOnList.addAll(sessionFactoryBeanDef.dependsOn)
    }
    sessionFactoryBeanDef.dependsOn = dependsOnList as String[]
    }
    }
    }

    最佳答案

    我不认为 Spring 提供了“bean 实例树”的可视化,但是您可以为 org.springframework.beans.factory.support.DefaultListableBeanFactory 设置日志级别。至DEBUG你会得到这样的输出:

    Creating shared instance of singleton bean '...fully qualified class name...'

    Returning cached instance of singleton bean '...fully qualified class name...'


    您可以查看来自 Hibernate 命名空间的 bean 的日志输出。
    我想你会使用结果来声明 DependsOn关系,所以为了完整性,这看起来像:
       @Bean 
    public SomeHibernateClass createHibernate() {
    ...
    }

    @Bean
    @DependsOn("createHibernate")
    public MyClass createMine() {
    ...
    }

    关于spring - 使用 GORM 6.1.x 在 Grails 3.3 中确定 Springs bean 实例化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572338/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com