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
urljdbc: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