- 03-5820-1777平日10:00〜18:00
- お問い合わせ
今回はPostgreSqlへ接続するSpringBootのDockerイメージ作成を試してみたいと思います。
前回(Docker ComposeをWindows)のDockerから追加で作成していきます。
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のコンテナに移して行きます。