【SpringBoot+Docker】Web MVC ベース その①~データベースを使うための最低限の手順~
今回から数回に分けて Web MVC のベース アプリケーションについて説明します。
最近、クライアントサイド MVC が大流行していますが、当社が開発する業務システムは Web MVC を基本にして開発します。
そして、効果的なところにクライアントサイド MVC を組み込むようにしています。
先に完成するソースコードを添付します。
Spring Boot 3.0 を使ったシンプルな Web MVC のベースプログラムです。
【Spring Boot+Docker】Hello Spring Boot 3.0 ~アプリケーションを開発できるようになる最初の一歩~で説明したプロジェクトをベースにしています。
そちらも参照して下さい。
この記事は Java、Docker、Visual Studio Code(以下、vscode)、シェルなどのプログラミングに関する基本的な技術を知っている、または、調べれば分かる程度の知識がある前提で書いています。
分かりづらいところがあったらコメントでお知らせ下さい。
今日のノウハウ
データベース(PostgreSQL)を使う
さっそく開発といきたいんですが、業務システムの裏には必ずデータベースがあります。
まずはデータベースを使えるようにします。
docker にデータベースを追加する
docker-compose.yml を開き下記の設定を追記して下さい。
PostgreSQL はバージョン 15 を使用します。
pgdata ボリュームを割り当ててあります。
ボリュームを割り当てておかないと docker を終了するとデータベースの情報が消えてしまうからです。
追記したら docker を起動または再起動して下さい。
services:
# 以下を追記
postgres:
image: postgres:15
restart: always
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- TZ=Asia/Tokyo
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
volumes:
♯ 以下を追記
pgdata:
demo データベースを作成する
PostgreSQL が起動したら demo データベースを作成します。
別のシェルを開き、docker ps -a コマンドで PostgreSQL が起動していることを確認します。
行の最後の方にある NAMES を確認して下さい。
changeit-postgres-1 のような行があって STATUS が UP になっていると起動しています。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc978f70caca maven:3 "/usr/local/bin/mvn-…" 2 minutes ago Up 2 minutes 0.0.0.0:5005->5005/tcp, 0.0.0.0:8080->8080/tcp changeit-demo-1
3aa0d0fe4ffe postgres:15 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5432->5432/tcp changeit-postgres-1
起動していることを確認したら次のコマンドで PostgreSQL にアクセスします。
changeit-postgres-1 のところは自分の環境の NAMES に合わせて読み替えて下さい。
$ docker exec -it changeit-postgres-1 psql -U postgres
psql (15.1 (Debian 15.1-1.pgdg110+1))
Type "help" for help.
postgres=#
プロンプトが postgres=# になればアクセスできています。
PostgreSQL にアクセスてきたら次の DDL で demo データベースを作成します。
postgres=# CREATE DATABASE demo;
CREATE DATABASE
postgres=#
demo データベースを作成したら次のコマンドで demo データベースにアクセスします。
postgres=# \c demo
You are now connected to database "demo" as user "postgres".
demo=#
プロンプトが demo=# になればアクセスできています。
これで demo データベースは作成できたんですが、ついでにテーブルも作っておきます。
次の DDL で users テーブルを作成します。
demo=# CREATE TABLE users (
id INT8 GENERATED BY DEFAULT AS IDENTITY,
username VARCHAR NOT NULL UNIQUE,
password VARCHAR NOT NULL,
enabled BOOLEAN NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE
demo=#
Web MVC ベースの説明が終わったら、Spring Security のパスワード認証を組み込もうと思っています。
これでデータベース側の準備は完了です。
データベースへの接続設定を行う。
src/main/resources にある application.properties を開きます。
まだ何も書かれていないので次の設定を追記します。
demo データベースに接続するための設定です。
# データベース接続設定
spring.datasource.url = jdbc:postgresql://postgres:5432/demo
spring.datasource.username = postgres
spring.datasource.password = postgres
jar ライブラリを追加する。
次の三つのライブラリを追加する設定です。
Spring Data JPA - Jakarta Persistence API を使用できるようにします。DB 操作がとても便利になるライブラリです。(jakarta に変わってますね。)
PostgreSQL Driver - PostgreSQL に接続するためのライブラリです。
Lombok - getXxx()、setXxx() などのメソッドを自動生成する便利なライブラリです。
pom.xml を開きます。
下記の設定を追記して下さい。
追記したら docker を起動または再起動して下さい。
<dependencies>
<!-- 以下を追記 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
まとめ
以上の修正でデータベースを使う準備が整いました。
PostgreSQL が動き、demo データベースがあります。
demo データベースには users テーブルもあるはずです。
JPA を使ってアクセスする準備もできています。
実際にアクセスするプログラムについては次回以降説明します。
最後に、docker の終了方法を念のため書いておきます。
コンソールで Ctrl+C を入力して、次のコマンドを実行します。
> docker compose down
おつかれさまでした。
この記事が気に入ったらサポートをしてみませんか?