参考ドキュメント: Spring Quickstart Guide
- Install Linux on Windows with WSL
- Windows 上で Linux 環境を実行する
- SDKMAN! the Software Development Kit Manager
- JDK や Maven 等のインストールが簡単にできる
# SDKMAN に必要なパッケージのインストール
sudo apt install zip unzip
# SDKMAN のインストール
curl -s "https://get.sdkman.io" | bash
# OpenJDK(Microsoft) のインストール
sdk install java 17.0.4.1-ms
-
- Spring Boot Tools, Spring Initializr, Spring Boot Dashboard が含まれている
-
参考ドキュメント: Spring Boot in Visual Studio Code
- コマンドパレットから Spring Boot Initializr を起動する
Select dependencies to add.
でSpring Web
を選択する
DemoApplication.java
を以下のコードで置き換え。
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
Option
package com.example.demo;
import java.util.Enumeration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.HttpServletRequest;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name, HttpServletRequest request) {
// output all http headers
Enumeration<String> headerNames = request.getHeaderNames();
StringBuilder headers = new StringBuilder();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
headers.append(headerName).append(": ").append(request.getHeader(headerName)).append("\n");
}
headers.append("remote addr: ").append(request.getRemoteAddr()).append("\n");
// Get hostname from environment variable
headers.append("hostname: ").append(System.getenv("HOSTNAME")).append("\n");
System.out.println(headers.toString());
// Print headers as HTML
return String.format("<html><body><h1>Hello %s!</h1><pre>%s</pre></body></html>", name, headers.toString());
// return String.format("Hello %s!", name);
}
}
./mvnw spring-boot:run
demo
ディレクトリに移動していない場合は最初に移動する。
拡張機能の Spring
から Run もしくは Debug を実行。
参考ドキュメント: Spring Boot with Docker
./mvnw package
- JDK に Microsoft の OpenJDK を使用
- OS に Alpine を使用
FROM mcr.microsoft.com/openjdk/jdk:17-distroless
ARG JAR_FILE=demo/target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t <レジストリ名>/demo-spring-openjdkms:mariner .
Docker イメージのテスト:
docker run -p 8080:8080 <レジストリ名>/demo-spring-openjdkms:mariner
コンテナ起動後、ブラウザで http://localhost:8080/hello
にアクセスする。
あらかじめ docker login
等でレジストリへログインする。
docker push <レジストリ名>/demo-spring-openjdkms:mariner
以下のファイルを deploy.yaml
として保存する。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demo-springboot
name: demo-springboot
spec:
replicas: 2
selector:
matchLabels:
app: demo-springboot
template:
metadata:
creationTimestamp: null
labels:
app: demo-springboot
spec:
containers:
- image: tsubasaxzzz/demo-spring-openjdkms:mariner
name: demo-spring-openjdkms-mariner
Kubernetes への展開
kubectl apply -f deploy.yaml
kubectl expose deployment demo-springboot --type LoadBalancer --target-port 8080 --port 80
- image: tsunomuracr1102.azurecr.io/demo-spring-app-1101:v0.2
name: demo-spring-openjdkms-mariner
resources:
limits:
cpu: 2000m
memory: 512Mi
requests:
cpu: 2000m
memory: 256Mi