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 を使用し、実行時エラーに依存して問題を検出する必要がありますか?