我正在使用一个使用GORM 6.1.6.RELEASE
,Spring-Boot 1.5.4.RELEASE
和Spring Core 4.3.9.RELEASE
的Grails 3.3应用程序。我试图声明一个在Hibernate开始验证底层数据库模式之前得到初始化的Spring bean。使用GORM 6.1.x确定Grails 3.3中的Springs bean实例化顺序
这是我喜欢做的事情。我想将我的Flyway注册为Spring bean,并将其注入到其中。为了在Hibernate开始验证当前数据库模式之前运行Flyway,我将我的flyway
bean作为依赖添加到sessionFactory
bean上。该命令将如下所示:
dataSource
豆flyway
豆hiberateDatastore
豆
格姆6.1用途org.grails.orm.hibernate.HibernateDatastore
作为一个Spring bean来初始化Hibernate的ORM和数据库。 sessionFactory
bean将hibernateDatastore#getSessionFactory
声明为工厂类。 因此总是首先创建hibernateDatastore
。
在Grails 3.3中创建自定义Spring 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[]
}
}
}
Grails问题https://github.com/grails/grails-core/issues/10769 – saw303