2

Grails サーバーの起動時に Liquibase の移行を実行することから始めています。データベースとオブジェクト モデルの同期を維持するために、dataSource で dbCreate='validate' を使用したいと考えています。現在、データソース構成は次のようになっています。

development {
    dataSource_dbm {
        dbCreate = ''
        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;MODE=Oracle"
        username = 'sa'
        password = ''
    }
    dataSource {
        dbCreate = 'validate'
        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;MODE=Oracle"
        username = 'sa'
        password = ''
    }
}

grails.plugin.databasemigration.dbm.updateOnStart = true
grails.plugin.databasemigration.dbm.updateOnStartFileNames = ['changelog.groovy']

Config.groovy で。これにより、起動時にいくつかのエラーが発生します。

Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'transactionManager': 
Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory';
nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory': 
Invocation of init method failed; 
nested exception is org.hibernate.HibernateException: 
Missing table: ...

デフォルトの dataSource が作成され、liquibase の移行が実行される前に dbCreate ポリシーが適用されているように見えます。

2 番目の dataSource をコメントアウトすると、起動時にすべての移行が実際に適用されていることがわかります。

検証の前に移行が実行されるように、データソースまたはデータベース移行プラグインを構成する方法はありますか? それとも、サーバー起動時の検証をあきらめて、dbCreate='' で dataSource を使用し、実行時エラーに依存して問題を検出する必要がありますか?

4

1 に答える 1