サーブレット/JSPの学習環境をVSCodeで構築(応用編)

※ 上記サーブレット/JSPの学習環境をVSCodeで構築するが完了しているものとして,本稿ではやや高度なトピックを扱います。キーワードを以下に示します。
Keywords: Docker / データベース / Git / JSTL / シェルスクリプト / デバッガ

※ 無料部分の文献情報を先に掲載します。

1. DockerコンテナにMysql環境を構築して接続する

1.1. 必要なツールのインストール

  • Dockerをインストールしてください。homebrewでやるのが簡単だと思います。

$ brew install --cask docker
  • インストールできたら,Docekr Desktopを立ち上げておいてください。

1.2. コンテナ起動のためのファイルを作成

  • ディレクトリ構成

classroom
│   docker-compose.yml
│   pom.xml
│
├───docs
│
├───mysql
│   ├───conf.d
│   │       my.cnf
│   ├───init.d
│   │       init.sql
│   └───Dockerfile
│
├───src
│   └───main
│       ├───java
│       └───resources
│
└───target
  • docker compose.ymlを次のように作成してください。

services:
  mysql:
    container_name: "mysql"
    hostname: "mysql"
    build:
      context: "."
      dockerfile: "./mysql/Dockerfile"
    volumes:
      - ./mysql/conf.d/:/etc/mysql/conf.d/
      - ./mysql/init.d/:/docker-entrypoint-initdb.d
    ports:
      - "13306:3306"
  • DockerFileを次のように作成してください。

FROM mysql:latest
​
ENV MYSQL_ROOT_PASSWORD password
ENV TZ "Asia/Tokyo"
​
RUN microdnf update -y \
    && microdnf install -y glibc-locale-source \
    && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
​
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
  • my.cnfファイルを次のように作成してください。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
​
[client]
default-character-set=utf8mb4
  • 必要に応じて,init.sqlファイルに,データベースの初期化用クエリを書いてください。

CREATE DATABASE training_db;
​
USE training_db;
​
-- 学生テーブルの作成
CREATE TABLE Students (
    student_id CHAR(4) NOT NULL,
    name NVARCHAR(31) NOT NULL,
    email VARCHAR(63) NOT NULL,
    password VARCHAR(63) NOT NULL,
    PRIMARY KEY (student_id)
);
​
...

1.3. コンテナの起動

  • docker composeを実行してください。

$ docker compose up -d
  • コンテナを起動できたら,以下のコマンドを使用し,mysqlをbashで操作してみてください。

$ docker-compose exec mysql bash
# bash-5.1が起動する
$ mysql -u root -p
# MYSQL_ROOT_PASSWORDを入力

1.4 pom.xmlに依存関係を追加

    <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.4.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>4.27.1</version>
    </dependency>

1.5. ConnectionManagerクラスの作成

  • 次のようなコネクションマネージャを作成しておくと便利です。

package jp.co.collasho.classroom.common;
​
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
​
/**
 * コネクションマネージャクラス
 */
public class ConnectionManager {
    /** コネクション */
    private Connection conn;
    /** JDBCURL */
    private String jdbcUrl = "jdbc:mysql://localhost:13306/training_db";
    /** ユーザ名 */
    private String user = "root";
    /** パスワード */
    private String password = "password";
​
    /**
     * データベース接続
     * 
     * @return コネクション
     */
    public Connection getConnection() {
        if (this.conn == null) {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                this.conn = DriverManager.getConnection(this.jdbcUrl, this.user, this.password);
                this.conn.setAutoCommit(false);
                System.out.println("データベースに接続しました。");
            } catch (SQLException e) {
                throw new RuntimeException("データベースの接続に失敗しました。", e);
            } catch (ClassNotFoundException e) {
                throw new RuntimeException("ドライバが見つからないためデータベースの接続に失敗しました。", e);
            }
        }
        return this.conn;
    }
​
    /**
     * データベース切断
     */
    public void closeConnection() {
        try {
            if (this.conn != null) {
                this.conn.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException("データベースの切断に失敗しました。", e);
        } finally {
            this.conn = null;
        }
    }
​
    /**
     * コミット
     */
    public void commit() {
        try {
            if (this.conn != null) {
                this.conn.commit();
            }
        } catch (SQLException e) {
            throw new RuntimeException("トランザクションのコミットに失敗しました。", e);
        }
    }
​
    /**
     * ロールバック
     */
    public void rollback() {
        try {
            if (this.conn != null) {
                this.conn.rollback();
            }
        } catch (SQLException e) {
            throw new RuntimeException("トランザクションのロールバックに失敗しました。", e);
        }
    }
​
}
​

1.6. 接続テスト

  • CheckConnection.javaは適当に作成してください。

package jp.co.collasho.classroom.test;
​
import java.sql.Connection;
import jp.co.collasho.classroom.common.ConnectionManager;
​
public class CheckConnection {
    public static void main(String[] args) throws ClassNotFoundException {
        ConnectionManager connectionManager = new ConnectionManager();
​
        try (Connection conn = connectionManager.getConnection()) {
            System.out.println("成功");
        } catch (Exception e) {
            System.out.println("失敗");
        }
    }
}


2. Gitでバージョン管理する

Gitのインストールや基本操作については,別の情報源に譲ります。
.gitignoreファイルを作成し,プロジェクトルート(classroomの直下)に配置してください。

# Java(Javaの自動生成ファイルを対象外にする)
*.class
*.jar
*.war
*.ear
​
# Idea(Ideaの自動生成ファイル/制御ファイルを対象外を対象外にする)
.idea
*.iml
*.iws
*.ipr
​
# OS(OSで自動で作成されるファイルを対象外にする)
Thumbs.db
.DS_Store
​
# Maven
/target/*
# But do not ignore WAR files
!/target/classroom.war
​
# Build
out
build
bin
​
# Other
*.log
*.swp
*.bak
​
# Security
DockerFile
​

バージョン管理を開始してください。

$ cd classroom
$ git init


3. JSTLのライブラリを使用する

ここから先は

3,374字

¥ 300

期間限定 PayPay支払いすると抽選でお得に!

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