見出し画像

【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

おつかれさまでした。



この記事が気に入ったらサポートをしてみませんか?