Grails 2.0 の利点の 1 つは、アプリケーション サーバーを再起動する必要なく、開発中にドメイン クラスを変更できることです。これは機能しますが、ドメイン クラスを変更すると、すべてのブートストラップ データが失われ、基本的に目的が果たせなくなります。デフォルトの h2 データベースを使用しています。
これを回避する最善の方法は何ですか? Postgres のような外部 DB に移動する必要がありますか?
Grails 2.0 の利点の 1 つは、アプリケーション サーバーを再起動する必要なく、開発中にドメイン クラスを変更できることです。これは機能しますが、ドメイン クラスを変更すると、すべてのブートストラップ データが失われ、基本的に目的が果たせなくなります。デフォルトの h2 データベースを使用しています。
これを回避する最善の方法は何ですか? Postgres のような外部 DB に移動する必要がありますか?
DataSource.groovy
新しく作成された Grails 2 アプリのデフォルトには
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
}
これcreate-drop
は、アプリケーションが再起動するたびに、データベースが最初から再作成されることを意味します。再起動後も持続するデータベースが必要な場合は、これを次のように変更します
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
(つまり、 を に変更create-drop
してupdate
から削除し:mem
ますurl
)。ただし、ドメイン クラスに加えることができるすべての変更が、update
適用できる限られたスキーマ変更に反映されるわけではないことに注意してください。プロパティの追加は問題ありませんが、プロパティを削除したり、スキーマの生成に影響する制約を変更したりすると、データベースを削除して再作成する必要がある場合があります (アプリを停止し、devDb ファイルを削除して、もう一度起動します)。