9.10。データベースの初期化
あなたはどのようなスタックはいに応じて、SQLデータベースを初期化するためにさまざまな方法を使用することができます。データベースが別のプロセスである場合はもちろん、あなたはまた、マニュアルを実行することができます。私たちは、パターン生成のための単一のメカニズムを使用することをお勧めします。
9.10.1。JPAを使用してデータベースを初期化します
JPAは、起動時にデータベースに対して実行するように設定することができDDLを生成する機能を有しています。これは、2つの外部プロパティによって制御されます。
spring.jpa.generate-ddl
機能を開閉する(ブール値)、および独立したサプライヤー。spring.jpa.hibernate.ddl-auto
(列挙)はHibernateはより細かく動作を制御することができる機能です。
9.10.2。休止状態を使用してデータベースを初期化します
あなたは、設定することができspring.jpa.hibernate.ddl-auto
、明確で休止状態プロパティの標準としてnone
値:validate
、update
、、 create
、とcreate-drop
。春ブーツあなたのデータベースがあなたのためのデフォルト値を選択するように埋め込まれています。管理者は、他のすべてのケースなしで任意のパターンや、デフォルトでは検出されない場合create-drop
。見て、Connection
組み込みデータベースの種類を検出することができます。HSQLDB、H2および組み込みDerby、他の人はそうではありません。インメモリ・データベースはから「本当の」データベースに変換すると、新しいプラットフォームやデータテーブルの存在についての仮定をしないでください。あなたは明示的に設定しなければならないddl-auto
か、データベースを初期化するために他のメカニズムのいずれかを使用します。
あなたは、有効にすることができorg.hibernate.SQL
、レコーダ出力モードを作成します。デバッグモードが有効になっている場合、これは自動的に行われます。
さらに、場合(つまり、最初から休止モードddl-auto
プロパティがに設定されているcreate
かcreate-drop
)、起動時にルートディレクトリという名前のクラスパスで実行されるimport.sql
ファイルは。あなたは、デモやテストのために有用である慎重に十分な、ですが、クラスパスの本番環境で表示したくない場合があります。場合 これは、Hibernateの機能(春とは何の関係も)ではありません。
9.10.3。データベースを初期化
春ブーツは、自動的にデータソースモデル(DDLスクリプト)を作成し、(DMLスクリプト)を初期化することができます。それぞれ、その標準のルート・クラス・パスの場所からschema.sql
とdata.sql
ロードSQL。さらに、スプリング起動処理schema-${platform}.sql
及びdata-${platform}.sql
ファイル(存在する場合)、特徴platform
値spring.datasource.platform
。これはあなたが必要なときにデータベース固有のスクリプトに切り替えることができます。たとえば、データベースのベンダ名(HSQLDB、H2、オラクル、MySQLへそれを設定するかを選択することができ 、PostgreSQLの、など)。
春ブーツが自動的に埋め込まれたモードのデータソースを作成します。あなたは使用することができspring.datasource.initialization-mode
、この動作をカスタマイズするためのプロパティを。たとえば、あなたが常に初期化したい場合は、関係なく、データソースの種類の方法:
spring.datasource.initialization-mode =always
デフォルトでは、春ブーツは、ラピッドフェール機能春JDBCの初期化手順を有効にします。スクリプトは、例外が発生した場合、そのアプリケーションが起動しないことが、この手段。あなたは、設定することができますspring.datasource.continue-on-error
動作を調整します。
JPAベースのアプリケーションでは、休止モードを使用するか、または作成することを選択することができますschema.sql
が、あなたは両方を行うことはできません。あなたはschema.sqlを使用している場合は、無効にしてくださいspring.jpa.hibernate.ddl-auto
。
9.10.4。データベース初期化春のバッチ
あなたは春のバッチを使用している場合、それはSQLの初期化スクリプトをあらかじめパッケージで最も人気のあるデータベースプラットフォームです。春ブーツは、データベースのタイプを検出し、起動時にスクリプトを実行することができます。あなたは組み込みデータベースを使用する場合は、この状況はデフォルトで発生します。あなたも示すように、それは、次の例のように任意のデータベースタイプを有効にすることを考えることができます。
spring.batch.initialize-schema =always
また、設定することができますspring.batch.initialize-schema=never
明確なクローズを初期化します。
9.10.5。高度なデータベース移行ツールを使用します
春ブーツは、移行ツールの2つのより高いレベルをサポートしていますFlyway
とLiquibase
。
起動時にデータベースの移行を実行フライウェイ
自動的に起動フライウェイデータベースの移行で実行するには、してくださいorg.flywaydb:flyway-core
、あなたのクラスパスに追加します。
典型的には、マイグレーションは、以下のフォームスクリプトであるV<VERSION>__<NAME>.sql
(と<VERSION>
下線付きの別のバージョン、例えば、「1」または「2_1」)。デフォルトでは、それらが配置されて命名されたclasspath:db/migration
フォルダ内のファイルが、あなたはして設定できるspring.flyway.locations
位置を修正します。これは、1つまたは複数であるclasspath:
か、filesystem:
カンマで区切られたリスト位置。たとえば、次のコンフィギュレーションスクリプトの検索パスの位置とデフォルトのカテゴリは/ opt / migrationディレクトリ:
spring.flyway.locations=classpath:db/migration,filesystem:/opt/migration
あなたはまた、特別な追加することができ{vendor}
、ベンダー固有のスクリプトを使用するプレースホルダを。次のことを想定します。
spring.flyway.locations=classpath:db/migration/{vendor}
上記構成は、DB /マイグレーションを使用していないが、データベースの種類に応じて(例えば、db/migration/mysql
MySQL用)ファイルフォルダを設定するために使用されます。サポートされているデータベースのリストでDatabaseDriver
で提供します。
マイグレーションは、Javaで記述できます。フライウェイは、任意の実装に使用するJavaMigration
豆自動設定を。
FlywayProperties
ほとんどの設定は、移行または閉位置のチェックを無効にするために使用することができ、他の性質のフライウェイと少量を提供しています。あなたが設定をより詳細に制御する必要がある場合は、登録を検討FlywayConfigurationCustomizer
豆を。
春ブーツは、呼び出しFlyway.migrate()
、データベースの移行を実行します。あなたはより多くの制御をしたい場合は、のための実装を提供FlywayMigrationStrategy
する@Bean。
SQLおよびJavaのコールバックをサポートしてフライウェイ。SQLコールバックを置くために、コールバックベースのスクリプトの設定classpath:db/migration
フォルダを。Javaベースのコールバックを使用するには、1つ以上の実施作るCallback
豆のを。任意のそのようなBeanは自動的にフライウェイに登録されます。それは使用することができます@Order
または実装Ordered
順序を調整します。また、それは非推奨に実現検出することができFlywayCallback
ビーン・インタフェースを、しかし、コールバック豆と一緒に使用することはできません。
デフォルトでは、(あなたのコンテキストで自動的に自動接続をフライウェイ@Primary
)、移行のためのデータソース。あなたが他のデータソースを使用する場合は、1を作成して、それをマークすることができ@FlywayDataSource
@Bean。これは2つのデータソースを希望した場合は、別のデータソースを作成し、@Primaryとしてそれをマークすることを忘れないでください。また、あなたが設定することができspring.flyway.[url,user,password]
、外部フライウェイネイティブのDataSourceプロパティを使用します。セットspring.flyway.url
またはspring.flyway.user
フライウェイは、独自のデータソースを使用して作るのに十分な。これら3つの属性のいずれかが設定されていない場合は、等価物性のその後、使用spring.datasource
価値。
また、フライウェイは、特定の状況のためのデータを提供して使用することができます。たとえば、次のことができsrc/test/resources
、マイグレーション固有のテストを入れて、ときにのみ、アプリケーションのテストにそれらを実行し始めました。また、設定をカスタマイズするために、特定のプロファイルを使用することができるspring.flyway.locations
場合にのみ、特定の移行プロファイルのアクティブを実行します。例えば、application-dev.propertiesでは、次の設定を指定できます。
spring.flyway.locations=classpath:/db/migration,classpath:/dev/db/migration
この設定では、dev/db/migration
唯一のdevのプロファイルでアクティブになっている場合は、移行を実行します。
LiquiBaseを起動時にデータベースの移行を実行します
あなたが起動時に自動的にLiquiBaseをデータベースの移行、セットを実行してorg.liquibase:liquibase-core
、あなたのクラスパスに追加します。
デフォルトでは、からのdb/changelog/db.changelog-master.yaml
主な変更ログを読んで、しかし、あなたが設定することができspring.liquibase.change-log
、その位置を変更します。YAMLに加えて、LiquiBaseをもJSON、XMLとSQL変更ログ・フォーマットをサポートしています。
移行のためのデフォルトでは、LiquiBaseを自動組立(@Primary)のDataSourceあなたとコンテキスト。あなたが他のデータソースを使用する必要がある場合は、1を作成して、それをマークすることができ@LiquibaseDataSource
@Bean。あなたは、あなたが2つのデータソースを使用する場合は、別のデータソースを作成し、@Primaryとしてそれをマークすることを忘れないでください。また、あなたが設定することができspring.liquibase.[url,user,password]
、外部LiquiBaseをネイティブのDataSourceプロパティを使用します。セットspring.liquibase.url
またはspring.liquibase.user
LiquiBaseをは独自のデータソースを使用して作るのに十分な。これら3つの属性のいずれかが設定されていない場合は、等価物性のその後、使用spring.datasource
価値。
参照してくださいLiquibaseProperties
、このような状況、デフォルトおよびその他のアーキテクチャとして使用可能な設定、詳細については。