Java11+Spring Boot+Dockerで作るWebアプリケーションその2

本記事は前回私が掲載した記事Java11+Spring Boot+Dockerで作るWebアプリケーションの続きとなります。

前回はWebアプリケーションの雛形を作成してDockerでMySQLコンテナを立ち上げるところまでを構築しましたので、今回はWebアプリケーションからMySQLに接続して取得したデータを画面に表示するところまでを構築したいと思います。

バックエンド側とフロントエンド側のディレクトリ構造およびファイル構成は以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
└── src
└──main
  ├── java
  │   └── com
  │   └── example
  │   └── demo
  │   ├── DemoApplication.java
  │   ├── domain
  │   │   └── Customer.java
  │   ├── repository
  │   │   └── CustomerRepository.java
  │   ├── service
  │   │   └── CustomerService.java
  │   └── web
  │   └── CustomerController.java
  └── resources
  ├── application.yml
  ├── static
  └── templates
  └── customer
  └── list.html

アプリケーション部分を作成

CustomerController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
@RequestMapping("customer")
public class CustomerController {
@Autowired
CustomerService customerService;

@GetMapping(path = "list")
String list(Model model) {
List<Customer> customers = customerService.findAll();
model.addAttribute("customers", customers);
return "customer/list";
}
}

Customer.java

1
2
3
4
5
6
7
8
9
10
@Data
@Entity
@Table(name = "customer")
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String firstName;
private String lastName;
}

CustomerService.java

1
2
3
4
5
6
7
8
9
10
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerRepository customerRepository;

public List<Customer> findAll() {
return customerRepository.findAll();
}
}

CustomerRepository.java

1
2
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}

list.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Customers</title>
</head>
<body>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">ID</th>
<th scope="col">FirstName</th>
<th scope="col">LastName</th>
</tr>
</thead>
<tbody>
<tr th:each="customer : ${customers}">
<td th:text="${customer.id}">id</td>
<td th:text="${customer.firstName}">firstName</td>
<td th:text="${customer.lastName}">lastName</td>
</tr>
</tbody>
</table>
</body>
</html>

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
spring:
profiles:
active: localhost
---
spring:
profiles: localhost
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_db
username: user
password: password
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
ddl-auto: update
data:
web:
base-path: /customer
---
spring:
profiles: docker
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://dbserver/demo_db
username: user
password: password
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
ddl-auto: update
data:
web:
base-path: /customer

前回アプリケーションのルート配下に作成したdocker-compose.ymlに以下のようにappの設定を追加します。

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: '2'
services:
dbserver:
build: ./docker/mysql
image: demo-db:0.0.1
restart: always
environment:
MYSQL_DATABASE: demo_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3314:3306"
volumes:
- ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./log/mysql:/var/log/mysql

app:
build: .
image: demo-app/boot:0.0.1
depends_on:
- dbserver
ports:
- "8080:8080"
volumes:
- .:/app
environment:
JAR_TARGET: demo-0.0.1-SNAPSHOT.jar

volumes:
mysql-db:
driver: local

最後にアプリケーションのルート配下にDockerfileを作成して完成です。

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
FROM ubuntu:18.10
RUN apt-get update
RUN apt-get -y install openjdk-11-jdk
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
VOLUME /tmp
RUN mkdir /app
WORKDIR /app
# jar target
ENV JAR_TARGET "demo-0.0.1-SNAPSHOT.jar"
# set entrypoint to execute spring boot application
ENTRYPOINT ["sh","-c","java -jar -Dspring.profiles.active=docker build/libs/${JAR_TARGET}"]

ここまで出来たら以下のコマンドでビルドして起動します。

docker-compose build
docker-compose up

正常にMySQLとアプリケーションが起動したことを確認後、以下のURLにアクセスするとDBに登録されたcustomerデータが画面に表示されるかと思います。
http://localhost:8080/customer/list

以上、非常にシンプルな構成ですが、Java11+Spring Boot+Dockerで構成されたアプリケーション構築についてのまとめでした。

このエントリーをはてなブックマークに追加