2016-05-10 5 views
0

私はGrails 2.5.xアプリケーションの非常に特殊な要件に取り組もうとしています。データベースのスキーマをアップグレードする前に、アプリケーションの開始前に一連のデータベース変換スクリプト(DBのバージョン/アプリケーションのバージョン)。私たちはこれまで「伝統的な」Java Servletアプリケーションでこれを行っていましたが、Grailsと少し面倒です。Grailsにpre-GORM initフックがありますか?

質問:イベントは、私は何とか私はGroovyと既存のデータソース構成を使用することができるようになるアプリの起動時ににフックができ、まだGORM/Hibernateが起動する前に起こるであろうと、Grailsのでは、ありますか?

一部のオプションは、私はすでに確認されました:

  • ブートストラップのinitクロージャは、データベーススキーマの期限が切れた場合、アプリケーションは単に「検証」モードで起動しないと同じように、ここでは動作しません。
  • これまで使用していなかったEvents.groovyがありますが、これらのイベントは、WARファイルにパッケージ化され、アプリケーションコンテナにデプロイされた自己完結型アプリケーションではなく、grailsのコンパイル/ビルドライフサイクルを目的としています。
  • grails database-migrationプラグインは似ていると思われ、ターゲットサーバでGrailsのコマンドラインを利用できると期待しています。と、変換は管理者によって手動で実行されます。 私はここで間違っている可能性が高いと判明しました。
+1

実際には、データベースの移行はアプリの起動時に自動的に実行され、純粋に手動ではありません。私はプラグインをもう一度見てみることをお勧めします。それはあなたが探しているものなのですから。 –

+0

ありがとうございますジョシュア - 私はそれをチェックします!多分、私はプラグインの説明を素早く読んだ後、間違った考えをしているかもしれません。 – Rado

+1

grails.plugin.databasemigration.updateOnStartFileNames = ['your-db-specific-changelog-filename.groovy'] < - データベースのすべてのリビジョンは、移行スクリプトによって実行されます。我々はh2、Oracle、SQLServer、MySQLに応じて異なるスクリプトを持っています。データベース移行は一般に非常に可能です。 – railsdog

答えて

0

私は本当にGORMの起動が行われる(とデータベースの検証や作成を実行)ブートストラップは、単にinitを介して、カスタムデータベースの移行コードを実行するための方法があるの前に、Grailsの起動時にフックする方法を発見していないもののHibernateのすべてのhbm2ddlを無効にする(有効なdbCreate値のいずれかを省略する)。

私たちのプロジェクトではデータベース移行プラグインが使用されましたが、すぐに正しく動作するように、hhm2ddlも無効にする必要があります。 validateオプションを使用した場合、GORMはの有効性を確認してからデータベース移行が行われ、アプリケーションは起動しませんでした。

hbm2ddlを無効にすると、hibernateのデータベーススキーマ検証に干渉することなく実行できるように、データベースのアップグレード/移行コードのカスタム実装を提供する場合も同じアプローチが使用できます。明らかな欠点は、検証モードをもはや使用できないことである。

関連する問題