はしめに
Dockerで「Spring + MYSQL」を使用するための開発環境を構築するとログを書いていきます。
前提条件
以下の条件が実施/確認済みであること。
(重複している部分が存在します)
・Dockerが設定済みであること
【開発環境構築】DockerをインストールしてPCにコンテナを作成してみる – SEもりのLog (selifemorizo.com)
・VSCodeでJavaを使用できる構築がされていること
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)
・Springプロジェクトを用意
【開発環境構築】VSCodeでSpring Bootを使用するための環境構築から実行まで実施する – SEもりのLog (selifemorizo.com)
・MYSQLのテーブル等の用意
【開発環境構築】DockerでMySQLの開発環境を構築する – SEもりのLog (selifemorizo.com)
フォルダ/ファイル構成を作成する
Spring_MYSQL
│ docker-compose.yml
│
├─DB ←Mysqlのデータをマウントするフォルダ
└─Test ←作成したSpring Bootプロジェクト
└─Test ←作成したSpring Bootプロジェクト
│ .gitignore
│ HELP.md
│ mvnw
│ mvnw.cmd
│ pom.xml
│
├─.mvn ←中身のファイルは省略
├─.vscode ←中身のファイルは省略
├─src ←中身のファイルは省略
└─target ←中身のファイルは省略
docker-compose.ymlを作成する
version: '3'
services:
#Java
java:
container_name: JavaTest
image: openjdk:17
ports:
# 既に使用しているポートは避ける
- 8080:8080
volumes:
- ./Test:/srv:cached
# 用意したSpring Bootプロジェクト
working_dir: /Test
# コンテナが消えないようにtrueを設定
tty: true
#MYSQL
mysql :
container_name: MysqlTest
image: mysql:latest
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: rootPass
MYSQL_DATABASE: test_database
MYSQL_USER: testUser
MYSQL_PASSWORD: testPass
TZ: 'Asia/Tokyo'
#データを保管するためにボリュームを指定する
volumes:
- ./db/data:/var/lib/mysql
#MySQLのデフォルトポートは「3306」だが、既に使用している場合は、別の値を使用する
ports:
- '3307:3306'
Docker-composeコマンドを実行する
最初の実行は少し時間がかかるかもしれません。
-f 以降は自身の作成したファイルのパスを指定してください。
>docker-compose -f \docker-compose.yml up -d
コンテナが作成されたことを確認する
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d37d47052ab openjdk:17 "jshell" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp JavaTest
61c6b93d1dc0 mysql:latest "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp MysqlTest
SpringBootでMYSQLへ接続する
プロジェクトの作成やテーブルの生成等は前提条件を参照ください。
application.propertiesの編集
resourcesフォルダは以下の「application.properties」にMYSQLへの接続設定を記載します。
# ポート/psssは自身で設定したもの
spring.datasource.url=jdbc:mysql://localhost:3307
spring.datasource.username=root
spring.datasource.password=test_database
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
pom.xml
依存関係を追加定義します。
<!-- MYSQLのJDBCドライバ -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
<scope>runtime</scope>
</dependency>
<!-- Springが提供するjdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
フォルダ/ファイルを作成する
フォルダ/ファイルを作成する。
既に作成されているプロジェクトフォルダ構成の中に追加する
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ └─test
│ │ │ ├─Controller
│ │ │ │ MysqlTestController.java ←追加
│ │ │ │
│ │ │ ├─Entities
│ │ │ │ TestDataEntity.java ←追加
│ │ │ │
│ │ │ └─Repositories
│ │ │ TestDataRepository.java ←追加
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ └─templates
│ │ mysqlIndex.html ←追加
│ │
Entityクラス
データベースのデータを関連付けるためのクラスを作成する。
【TestDataEntity.java】
package com.example.test.Entities;
import java.util.Date;
import javax.persistence.Id;
import lombok.Data;
@Data
public class TestDataEntity
{
public TestDataEntity(int id, String name, String createdUser, Date createdDate, String updatedUser, Date updatedDate)
{
this.id = id;
this.name = name;
this.createdUser = createdUser;
this.createdDate = createdDate;
this.updatedUser = updatedUser;
this.updatedDate = updatedDate;
}
@Id
private Integer id;
private String name;
private String createdUser;
private Date createdDate;
private String updatedUser;
private Date updatedDate;
}
Repositoryクラス
[test_table]テーブルへの接続(CRUD)の情報を一括管理するクラスを作成する。
【TestDataRepository.java】
package com.example.test.Repositories;
import com.example.test.Entities.TestDataEntity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class TestDataRepository
{
@Autowired
JdbcTemplate jdbcTemplate;
String selectAllsql = "SELECT id ,name,createdUser,createdDate,updatedUser,updatedDate FROM mysql.test_table";
public List<TestDataEntity> selectAll()
{
List<Map<String, Object>> tempList = jdbcTemplate.queryForList(selectAllsql);
List<TestDataEntity> testDataList = new ArrayList<>();
for (Map<String, Object> testdata : tempList)
{
testDataList.add(new TestDataEntity(
(int) testdata.get("id"),
(String) testdata.get("name"),
(String) testdata.get("createdUser"),
(Date) testdata.get("createdDate"),
(String) testdata.get("updatedUser"),
(Date) testdata.get("updatedDate")));
}
return testDataList;
}
}
Controllerクラス
画面のデータ受け渡し制御を実施するクラスを作成する。
【MysqlTestController.java】
package com.example.test.Controller;
import java.util.List;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import com.example.test.Entities.TestDataEntity;
import com.example.test.Repositories.TestDataRepository;
import lombok.RequiredArgsConstructor;
@Controller
@RequiredArgsConstructor
public class MysqlTestController
{
private final TestDataRepository testDataRepository;
@RequestMapping("/test2")
public String Index(Model model)
{
List<TestDataEntity> list = testDataRepository.selectAll();
model.addAttribute("TestDataList",list);
return "mysqlIndex";
}
}
View
画面表示を実施するhtmlを作成する。
【mysqlIndex.html】
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<table border="2" cellpadding="6" cellspacing="5">
<tr>
<th>id</th>
<th>name</th>
<th>createUser</th>
<th>createDate</th>
<th>updateUser</th>
<th>updateDate</th>
</tr>
<tr th:each="list : ${TestDataList}">
<td th:text="${list.id}"></td>
<td th:text="${list.name}"></td>
<td th:text="${list.createdUser}"></td>
<td th:text="${list.createdDate}"></td>
<td th:text="${list.updatedUser}"></td>
<td th:text="${list.updatedDate}"></td>
</tr>
</table>
</body>
</html>
実行確認
F5キー、またはタブの実行からプロジェクトを実行後にブラウザで実装した内容が表示されることを確認する。
【ブラウザで指定するURL】
“http://localhost:8080/test2”
ドキュメント
【Docker】
Docker ドキュメント日本語化プロジェクト — Docker-docs-ja 24.0 ドキュメント
【MySQL】
MySQL
【Spring】
Spring リファレンスドキュメント – Java フレームワーク (pleiades.io)
最後に
以上、ログになります。
これからも継続していきましょう!!
コメント