WSLの用意
> wsl -l -v
> wsl --unregister Ubuntu-24.04
> wsl -l -v
> wsl --install Ubuntu-24.04
> wsl -d Ubuntu-24.04
JDKのインストール
$ java -version
$ sudo apt update
$ sudo apt list openjdk*
$ sudo apt install openjdk-17-jdk-headless
$ java -version
必要なライブラリをインストール
$ sudo apt install maven jq
$ mvn -v
$ jq --version
Spring Initializrサイトからアプリプロジェクトのモックを取得する。
https://start.spring.io/
画面では以下を選択する。
Project ◎Maven
Language ◎Java
Spring Boot ◎3.4.5
Project Metadata
- Group com.example
- Artifact demo
- Name demo
- Description Demo project for Spring Boot
- Package name com.example.demo
- Packaging ◎Jar
- Java ◎17
Dependencies Spring Web
プロジェクトのひな形を用意
$ cd ~/
$ curl -s https://start.spring.io/starter.zip -d type=maven-project -d dependencies=web -d javaVersion=17 -d language=java -d bootVersion=3.4.5 -d baseDir -d demo -d groupId=com.example -d artifactId=demo -d name=demo -d description='Demo project for Spring Boot' -d packageName=com.example.demo -d packaging=jar -o demo.zip
$ unzip demo.zip -d sample
$ cd sample
$ mvn validate
$ mvn compile
$ mvn test
特定のクラスのみテストを実行する
$ mvn test -Dtest=BlogicTest
特定のクラス、特定メソッドのみテストを実行する
$ mvn test -Dtest= BlogicTest#blogicTest1
ワイルドカードを使って対象となるテストクラスを一括実行する
$ mvn test -Dtest=Blogic*Test
パッケージ生成
JAR、WAR等の成果物を生成する。
packageを実行すればvaliate、compile、test、packageのフェーズも実行される。
$ mvn package
インスタンス起動
$ mvn spring-boot:run
別画面で
$ curl localhost:8080
{"timestamp":"2025-05-13T02:40:14.354+00:00","status":404,"error":"Not Found","path":"/"}
⇒ひとまずWeb API接続ができた
インスタンス停止
$ Ctrl + C
別画面で
$ curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Couldn't connect to server
⇒接続エラーとなる
それでは Web API を作成してみます。
2ファイル必要です。
$ vi src/main/java/com/example/demo/Greeting.java
---
package com.example.demo;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
---
$ vi src/main/java/com/example/demo/GreetingController.java
---
package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
---
コンパイルとインスタンス起動
$ mvn compile
$ mvn spring-boot:run
HTTPでアクセステスト
$ curl localhost:8080/greeting
{"id":2,"content":"Hello, World!"}
$ curl localhost:8080/greeting?name=111
{"id":1,"content":"Hello, 111!"}