MySql
テスト
MySQL docker テストコンテナに対するテストを行うには、src/test/resources/application-test.yaml
内の *プラットフォーム* を mysql
に設定します
application-test.yaml がまだ存在しない場合は、docs/testing を参照してください。
照合順序
MySql では(おそらくそれも行うべきでしょう)、データベースで使用してほしい照合順序と文字セットを指定できます。以下の例では、照合順序は utf8mb4_unicode_ci
で指定します。
ebean:
test:
platform: mysql #, h2, postgres, mysql, oracle, sqlserver
ddlMode: dropCreate # none | dropCreate | migrations | create
dbName: test
mysql:
collation: utf8mb4_unicode_ci
characterSet: utf8mb4
上記の設定では、以下のデフォルトが使用されます。
ユーザー名 | {databaseName} |
---|---|
パスワード | test |
ポート | 4306 |
url | jdbc:mysql://:{port}/{databaseName} |
ドライバー | com.mysql.jdbc.Driver |
イメージ | mysql:{version} |
「デフォルト」- 照合順序
照合順序を default
と指定できます。その場合、照合順序は MySql が使用するデフォルトに任されます。
ebean:
test:
platform: mysql #, h2, postgres, mysql, oracle, sqlserver
ddlMode: dropCreate # none | dropCreate | migrations | create
dbName: test
mysql:
version: 8.0
collation: default
io.ebean.docker
のログでログレベルを DEBUG にすると、--character-set-server
と --collation-server
を確認できます。
... INFO io.ebean.docker.commands.Commands - Run container ut_mysql with port:4306 db:my_app user:my_app mode:Create shutdown:
... DEBUG io.ebean.docker.commands.Commands - docker run -d --name ut_mysql -p 4306:3306 -e MYSQL_ROOT_PASSWORD=admin mysql:5.6
ebean-mysql 依存関係
MySql 固有のプラットフォームコードのみを導入したい場合は、io.ebean:ebean
ではなく io.ebean:ebean-mysql
依存関係を使用できます。io.ebean:ebean
に依存すると、すべてのプラットフォームが導入されます。
種類
UUID
UUID はネイティブの MySQL タイプではないため、BINARY(16) または VARCHAR(36) にマップできます。
JSON
コンテンツをマップするには @DbJson
を使用できます。
履歴のサポート
MySQL の履歴のサポートは、トリガーと履歴テーブルを生成することによって提供されます。
Docker コンテナ
mysql の docker コンテナバージョンをプログラムで開始できます。アプリケーションをローカルで実行するには便利な方法です。
下記では、ebean-test
にすでに含まれている ebean-test-docker
依存関係が使用されています。ebean-test
に依存していない場合は、依存関係として io.ebean:ebean-test-docker:5.0
を追加してください。
package main;
import io.ebean.docker.commands.MySqlContainer;
public class Main {
public static void main(String[] args) {
MySqlContainer container = MySqlContainer.newBuilder("8.0")
.dbName("my_db")
.user("my_user")
.password("my_pass")
.build();
// by default this mysql docker collation is case sensitive using utf8mb4_bin
// builder.collation("default");
// builder.collation("utf8mb4_unicode_ci");
// builder.characterSet("utf8mb4");
container.start();
}
}
上記のコードは、ポート 4306 で MySql 8 docker コンテナをプログラムで開始します。コンテナ名は ut_mysql で、データベースとユーザーが作成されます。このコンテナはすでに存在している場合、ドロップされて再作成されます。
Docker トレースログ
io.ebean.docker
のログレベルを trace
に設定し、問題のトラブルシューティングや ebean-test-docker の動作の理解に役立てることができます。
15:59:48.965 [main] TRACE i.e.d.c.Commands - sqlRun: select User from user where User = 'my_user'
15:59:48.980 [main] TRACE i.e.d.c.Commands - sqlRun: show databases like 'my_db'
15:59:48.982 [main] DEBUG i.e.d.c.Commands - sqlRun: drop database my_db
15:59:48.987 [main] TRACE i.e.d.c.Commands - sqlRun: show databases like 'my_db'
15:59:48.989 [main] DEBUG i.e.d.c.Commands - sqlRun: create database my_db
15:59:48.995 [main] DEBUG i.e.d.c.Commands - sqlRun: set global log_bin_trust_function_creators=1
15:59:48.996 [main] TRACE i.e.d.c.Commands - sqlRun: select User from user where User = 'my_user'
15:59:48.997 [main] DEBUG i.e.d.c.Commands - sqlRun: create user 'my_user'@'%' identified by 'my_pass'
15:59:49.001 [main] DEBUG i.e.d.c.Commands - sqlRun: grant all on my_db.* to 'my_use