スポンサーリンク

Webアプリケーション開発

SpringBootのDB環境の構築

投稿日:2022年1月25日 更新日:

MySQLでDB・DBユーザーを作成

下記の手順でMySQLのDB・DBユーザーを作成します。

$ mysql --version
mysql  Ver 8.0.27 for macos12.0 on arm64 (Homebrew)

$ mysql -u root -p
Enter password: (パスワードを入力する)

mysql> create database okozukai;
Query OK, 1 row affected (0.05 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| okozukai           |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.05 sec)

mysql> create user 'okozukaiadmin'@'%' identified by 'password';
Query OK, 0 rows affected (0.03 sec)

mysql> grant all on okozukai.* to 'okozukaiadmin'@'%';
Query OK, 0 rows affected (0.00 sec)

DBマイグレーション flywayの設定

下記の記述をbuild.gradleに追記します。

plugins {
	id "org.flywaydb.flyway" version '8.2.0'
}

dependencies {
	implementation 'mysql:mysql-connector-java:8.0.27'
}

flyway {
	url = 'jdbc:mysql://localhost:3306/okozukai'
	user = 'okozukaiadmin'
	password = 'password'
	schemas = ['okozukai']
}

その後、コマンドで依存関係を更新し、flywayの動作確認を行います。

$ ./gradlew build --refresh-dependencies

$ ./gradlew flywayMigrate

> Task :flywayMigrate
Skipping filesystem location:/Users/noricgeographic/repositories/okozukai-system/src/main/resources/db/migration (not found).
No migrations found. Are your locations set up correctly?

BUILD SUCCESSFUL in 742ms
1 actionable task: 1 executed

BUILD SUCCESSFUL と表示されることを確認してください。

初回のflywayMigrateの実行により、flyway_schema_historyというテーブルが作成されていますので、MySQLを確認します。

mysql> show tables;
+-----------------------+
| Tables_in_okozukai    |
+-----------------------+
| flyway_schema_history |
+-----------------------+
1 row in set (0.00 sec)

このように、flyway_schema_historyテーブルが作成されていれば、flywayによるDBマイグレーションの準備が整いました。

 

ここまででエラーが出力された場合は、
https://springhack.com/flyway%e3%81%a7springboot%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%aedb%e3%83%9e%e3%82%a4%e3%82%b0%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/#Flyway
こちらのページを参考にしてください。

テーブル作成

今回は下記の赤枠2つのテーブルを作成します。

最初のテーブル作成

flywayを使ってテーブルを作成していきます。

まずはCREATE文を作成します。
flywayでは、src/main/resources/db/migrationディレクトリの中に、
V1__xxx.sql の命名ルールでSQLを配置します。

CREATE TABLE `children` (
  `child_id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `birthday` date NOT NULL,
  PRIMARY KEY (`child_id`)
) ENGINE=InnoDB;

配置したSQLをDBに反映させるために、gradle flywayMigrate を叩きます。
(もしくは、IDEでflywayMigrateタスクを実行します)

$ ./gradlew flywayMigrate

BUILD SUCCESSFUL in 897ms
1 actionable task: 1 executed

BUILD SUCCESSFULと出たら成功です。

この結果が、flyway_schema_historyテーブルに保存されているので確認してください。

mysql> select * from flyway_schema_history;
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
| installed_rank | version | description     | type | script                  | checksum    | installed_by  | installed_on        | execution_time | success |
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
|              1 | 1       | create children | SQL  | V1__create_children.sql | -1123835275 | okozukaiadmin | 2022-01-26 09:04:58 |             36 |       1 |
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
1 row in set (0.00 sec)

2回目以降のテーブル作成

やはりまずはCREATE文を作成します。

CREATE TABLE `helps` (
  `help_id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `unit_price` int NOT NULL,
  PRIMARY KEY (`help_id`)
) ENGINE=InnoDB;

ファイル名の先頭のバージョンをインクリメントしてください。
前回、V1を実行したので、今回はV2やV1.1などにします。

現場ではV1.0.1やV1.1など小数以下が指定されてることもありますが、
あまりその指定でメリットがあると感じたことはありません。
小数なしの方がわかりやすいので、小数なしにしておくと良いと思います。

SQLファイルを作成したら、flywayMigrateを実行します。

$ ./gradlew flywayMigrate

BUILD SUCCESSFUL in 897ms
1 actionable task: 1 executed

BUILD SUCCESSFULが表示されたら成功です。

flyway_schema_historyテーブルで確認してください。

mysql> select * from flyway_schema_history;
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
| installed_rank | version | description     | type | script                  | checksum    | installed_by  | installed_on        | execution_time | success |
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
|              1 | 1       | create children | SQL  | V1__create_children.sql | -1123835275 | okozukaiadmin | 2022-01-26 09:04:58 |             36 |       1 |
|              2 | 2       | create helps    | SQL  | V2__create_helps.sql    |  1519032896 | okozukaiadmin | 2022-01-26 09:16:12 |             24 |       1 |
+----------------+---------+-----------------+------+-------------------------+-------------+---------------+---------------------+----------------+---------+
2 rows in set (0.01 sec)

今回実行したファイルが記録されていることが確認できました。

この要領で、どのDDLまで実行したか?をバージョン管理できるため、flywayは現場で非常に愛されています。

ORマッパーの準備・テスト

ここではSpring-MyBatisを使っていきます。

MyBatisを依存関係に追加する

build.gradleにmybatis-spring-boot-starterを追加してください。

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'mysql:mysql-connector-java:8.0.27'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.1'

	developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

この状態でSpringBootを起動すると、次のように怒られます。

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

DBの接続情報が指定されてません。と怒られます。

DBの接続情報を下記の要領でapplication.ymlに定義します。

spring:
    ## DB接続情報
    dataSource:
        url: jdbc:mysql://localhost:3306/okozukai
        username: okozukaiadmin
        password: xxx
        driver-class-name: com.mysql.cj.jdbc.Driver

この状態で再度SpringBootを起動してみてください。
正常に起動できていれば、MyBatisを使う準備が整いました。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-Webアプリケーション開発

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.