私は、顧客管理にさまざまな MySQL スキーマを使用するプロジェクトに取り組んでいます。たとえば、すべての顧客は、スケルトン テンプレートで作成された独自のデータベース スキーマを持っています。
互換性の問題のため、Java から新しい MySQL スキーマを作成する必要がありますが、これは以前は PHP で行われていました。を繰り返し使用して MySQL データベースで完全に機能する小さなサービス クラスを作成しましたがCREATE TABLE 'a' LIKE 'b';
、H2 はテーブルを作成するときに - 部分をサポートしていないため、これは H2db では機能しませんLIKE
。次に、MySQL を作成し、Java で簡単に処理できるようにファイルを変更しました (Files.readAllLines
に渡されStatement.executeBatch
ます)。ただし、このダンプは H2db でも失敗します。これは、 のようなステートメントが原因ですCOLLATION=UTF8
。悲しいことに、正しくエンコードする必要がある特別な文字がよくあるため、これらは重要です。そのため、SQL ファイルから上記のステートメントを単純に削除することはお勧めしません。
次のように DataSource を初期化します。
public DataSource dataSource(ResourceLoader resourceLoader) {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.setScriptEncoding("UTF-8")
.addScript("data.sql").build();
}
したがって、私の構成の可能性はほとんどありません。gradle
私たちはアプリケーションを構築するために使用しているので、提案されたmaven
-plugin も役に立ちません - 少なくとも私はそれを で使用する方法を知りませんでしたgradle
。
したがって、ここでの問題は、サービスが実際にデータを正しく永続化するかどうかを確認する必要があることですが、H2 は構文をサポートしていないため、インメモリでは実行できず、「実際の」MySQL を使用することは許可されていません。これは、すべてのテストを「実際の」接続から切り離す必要があり、必要に応じてデータベースのメモリ内ストアのみを使用するためです。