0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2024

Day 16

SpringBootでDBのマイグレーションを管理する(MySQL)

Last updated at Posted at 2024-12-15

前回のつづき
前回はDockerを使用してMySQLコンテナ起動を行った。

SpringBoot 向けのMySQLセットアップ覚え書き

目的

SpringBootアプリケーションとMySQLの接続設定をする。
migrationファイルを作成してDBの変更管理を可能にする。

環境

(前回と同じ)
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4460
Rancher Desktop V1.16.0
MySQL 8.0

SpringBoot 3.3.5

VSCodeで開発を行う場合はSTSの拡張も要導入
https://spring.io/tools

POMファイルの依存ライブラリを設定

dependenciesとpluginsに必要なライブラリとプラグインを追加

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.13.0</version>
		</dependency>
		<dependency>
			<groupId>org.flywaydb</groupId>
			<artifactId>flyway-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.flywaydb</groupId>
			<artifactId>flyway-mysql</artifactId>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.flywaydb</groupId>
				<artifactId>flyway-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
 

application.properties →application.yml

application.propertiesでSpringBootとMySQLの接続設定を行う。
次のパスに格納されている。
demo\src\main\resources\application.properties
特に編集していなければまだ次の一行しか記載されていない。

spring.application.name=demo

application.propertiesのままだと扱いづらいためpropertyファイルの形式をymlに変える。
ファイル名はapplication.yml

spring:
  application:
    name: demo

VSCodeでSTSの拡張を導入している場合、application.propertiesを右クリックするとyamlに変換する項目が表示される。
image.png

MySQLへの接続設定とflywayの設定を追加する。
datasourceでは接続するDBとドライバを設定。
flywayのlocationsのフォルダにmigrationファイルを格納する。
serverの項目はアプリケーションのポートを指定している。

spring:
  application:
    name: demo
    #Spring Datasource (MySQL access info)
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    username: AAAA
    password: BBBB
    driver-class-name: com.mysql.cj.jdbc.Driver
    #Flyway settings
  flyway:
    locations: classpath:db/migration
    user: AAAA
    password: BBBB
    url: jdbc:mysql://localhost:3306/mydatabase
server:
  port: 3000

詳しくないうちはapplication.ymlはgitignoreファイルで追跡対象外にしてgit管理をしないことを推奨。

migrationファイルの作成

demo\src\main\resourcesdb\migrationのフォルダを作成する。
ここにmigrationファイルを格納する。
migrationファイルはファイル名に注意が必要。
今回はファイル名をV0.01__Create_city_table.sqlとする。
マイグレーションファイル名はV<VERSION>__<NAME>.sqlの形式で作成する必要がある。

--  V0.01__Create_cities_table.sql
CREATE TABLE city( 
    id BIGINT AUTO_INCREMENT PRIMARY KEY, 
    prefecture_id CHAR (2) NOT NULL, 
    code CHAR (3) NOT NULL, 
    name VARCHAR (10) NOT NULL, 
    name_kana VARCHAR (20) NOT NULL
);

migration実行

アプリケーション起動時に次のようなログが表示されればmigration実行成功。

2024-12-09T19:40:13.272+09:00  INFO 29004 --- [demo] [           main] org.flywaydb.core.FlywayExecutor         : Database: jdbc:mysql://localhost:3306/mydatabase (MySQL 8.0)
2024-12-09T19:40:13.333+09:00  INFO 29004 --- [demo] [           main] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.019s)
2024-12-09T19:40:13.346+09:00  INFO 29004 --- [demo] [           main] o.f.core.internal.command.DbMigrate      : Current version of schema `mydatabase`: << Empty Schema >>
2024-12-09T19:40:13.355+09:00  INFO 29004 --- [demo] [           main] o.f.core.internal.command.DbMigrate      : Migrating schema `mydatabase` to version "0.01 - Create city table"
2024-12-09T19:40:13.403+09:00  INFO 29004 --- [demo] [           main] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema `mydatabase`, now at version v0.01 (execution time 00:00.023s)

VSCodeでのアプリケーション起動方法
image.png
画面左端のアイコンのSpringBootDashboardを選択するとアプリケーション名が表示される。
起動したいアプリケーションにカーソルを合わせると▷のマークが表示され、クリックするとアプリケーションを起動できる。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?