2024-04-18に投稿

春コミの原稿やってました。時間が空いてしまったのですが続き。

postgresへの接続設定を追加

src/main/application.yamlを作成して以下を記入

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://db:5432/example
    username: postgres
    password: ****

ここでは仮置きとしてpasswordを直接書いちゃってますが、
危ないので本当はやってはだめです。

中身の確認用にcompose.yamlに以下を追加。
これを入れておくと、postgresの中身をそのまま見ることができます。

# servicesの下
  adminer:
    image: adminer
    restart: always
    ports:
      - 8082:8080

初期化用のSQLを作り、

db/init.sql

DROP TABLE IF EXISTS tamesi;
CREATE TABLE IF NOT EXISTS tamesi (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  age INTEGER NOT NULL
);

それを初期化用に設定

    volumes:
      - db-data:/var/lib/postgresql/data
# ↓を追加
      - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql

docker-entrypoint-initdb.dに置くと初期化してくれるらしい。

公式ドキュメント

で、エラーとか起きるので都度修正して、

plugins {
    id("org.springframework.boot") version "3.2.2"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.22"
    kotlin("plugin.spring") version "1.9.22"
    kotlin("plugin.jpa") version "1.9.22" # 追加
}

https://spring.io/guides/tutorials/spring-boot-kotlin

@Entity
@Table(name = "tamesi")
data class TamesiTableData(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) # 追加
    val id: Int?, # Int型に変更
    val name: String,
    val age: Int
)

実行

以下で実行。

$ docker compose up -d --build

スクリーンショット 0006-04-18 16.52.21.png
スクリーンショット 0006-04-18 16.52.42.png
スクリーンショット 0006-04-18 16.52.36.png
いい感じに動いてそうなのでsaveから

$ curl -X POST -H "Content-Type: application/json" -d '{"name":"taro", "age":11}' localhost:8081/save

レスポンスはこれ

{"name":"taro","age":11}

Adminerからも見てみる

スクリーンショット 0006-04-18 16.50.37.png
スクリーンショット 0006-04-18 16.54.10.png
OKっぽい

取得の方も叩いてみる

$ curl "localhost:8081/get/1"

レスポンス

{"name":"taro","age":11}

OK!

終了時は以下コマンドで

$ docker compose down -v

ところでこれって関数型プログラミングとか全然触れてないですね。


gooye-g

初心者

所有者限定モードのためこのボードには投稿できません
コメント