J'utilise une application Grails 3.3 qui utilise GORM 6.1.6.RELEASE
, Spring-Boot 1.5.4.RELEASE
et Spring Core 4.3.9.RELEASE
derrière la scène. J'essaie de déclarer un bean Spring qui est initialisé juste avant que Hibernate commence à valider le schéma de base de données sous-jacent.Déterminer l'ordre d'instanciation de beans Springs dans Grails 3.3 avec GORM 6.1.x
Voici ce que j'aime faire. Je veux enregistrer mon Flyway comme un haricot de printemps et y injecter le haricot dataSource
. Pour que Flyway soit exécuté avant que Hibernate commence à valider le schéma de base de données actuel, j'ajoute mon bean flyway
en tant que dépendance au bean sessionFactory
. L'ordre serait le suivant:
dataSource
haricotflyway
haricothiberateDatastore
haricot
GORM 6.1 utilisations org.grails.orm.hibernate.HibernateDatastore
comme un grain de printemps pour initialiser la mise en veille prolongée ORM et la base de données. Le bean sessionFactory
déclare le hibernateDatastore#getSessionFactory
comme classe de fabrique. Par conséquent, le hibernateDatastore
est toujours créé en premier.
Quelle est la façon Grails 3.3 pour créer un grain de printemps personnalisé qui doit courir après la connexion à la base de données est disponible, mais avant les choses se Hibernate initialisé?
Dans les versions précédentes de 3.x Grails, il était possible de le déclarer dans resources.groovy
comme ça.
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 problème https://github.com/grails/grails-core/issues/10769 – saw303