コラム

[Docker]SpringBootのDockerイメージ作成①

今回はPostgreSqlへ接続するSpringBootのDockerイメージ作成を試してみたいと思います。
前回(Docker ComposeをWindows)のDockerから追加で作成していきます。

SpringBootアプリ作成

Jdkは11を使用します。

まずhttps://start.spring.io/ でプロジェクトを作成します。

ProjectはMaven、言語はJava、SpringBootのバージョンは2.5.6にしました。
ADD DEPENDENCIESでDependenciesに以下を追加します。
・PostgreSql Driver:PostgreSqlを使用する為追加
・Spring Data R2DBC:今回はDBアクセスにR2DBCを使用する為追加
・Lombok:アノテーションを使用する為追加
・Spring Web:Webアプリケーションを作成する為追加

GENERATE CTRL+ を押下するとプロジェクトを格納したzipファイルがダウンロードされるので、docker-compose.ymlがあるディレクトリに解凍します。
(今回は、前回作ったdocker用ディレクトリを使用)

docker-sample/
            ├─ db/
            ├─ account/
            ├─ docker-compose.yml

SpringBoot用ソースファイル・設定ファイル作成

PosgreSqlからデータを取得し表示するだけの機能を実装していきます。
以下のファイルを作成します。

ソースファイル
account\src\main\java\com\example\account\controller\AccountController.java
account\src\main\java\com\example\account\repository\AccountRepository.java
account\src\main\java\com\example\account\entity\Account.java

設定ファイル
account\src\main\resources\application.propertiesを削除
account\src\main\resources\application.ymlを作成

package com.example.account.controller;

import com.example.account.entity.Account;
import com.example.account.repository.AccountRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.io.*;
import java.net.*;

@RestController()
@RequestMapping(value = "/account")
@RequiredArgsConstructor
class AccountController {

    @Autowired
    private final AccountRepository accountRepository;

    @GetMapping("")
    public Flux<Account> all(){
        return this.accountRepository.findAll();
    }
}
package com.example.account.repository;

import com.example.account.entity.Account;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;

public interface AccountRepository extends ReactiveCrudRepository<Account, Long> {
}
package com.example.account.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("account")
public class Account {

    @Id
    private Long id;
    private String username;
}
app:
  container-name: ${CONTAINER_NAME:account}

server:
  port: ${PORT:9002}

spring:
  main:
    banner-mode: "off"
  application:
    name: account
  r2dbc:
    url: ${DB_URL:r2dbc:postgresql://localhost:5432/db}
    username: ${DB_USER:postgres}
    password: ${DB_PASSWD:postgres}

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

ビルドして実行

Powershellを起動してaccountディレクトリに移動後、
「./mvnw clean spring-boot:run」コマンドを実行します。
(※ 前回作成したPostgreSqlのコンテナは起動し、ローカルPCでPostgresqlが動いている場合サービスを停止してください。)


起動後、次のURLにhttp://localhost:9002/accountにアクセスします。

JSONデータが表示されたら、Springbootアプリの完成です。次回はdockerのコンテナに移して行きます。

この記事をシェアする
  • Facebookアイコン
  • Twitterアイコン
  • LINEアイコン

お問い合わせ ITに関するお悩み不安が少しでもありましたら、
ぜひお気軽にお問い合わせください

お客様のお悩みや不安、課題などを丁寧に、そして誠実にお伺いいたします。

お問い合わせはこちら
お電話でのお問い合わせ 03-5820-1777(平日10:00〜18:00)
よくあるご質問