Spring Bootでマルチモジュールアプリを作成
複数のプロジェクトを含んだSpring Bootアプリを作成します。
cf. https://spring.io/guides/gs/multi-module
プロジェクト構成
easyproject
├── easyapp
│ └── (API側実装)
├── easyweb
│ └── (web側実装)
├── mvnw
├── mvnw.cmd
└── pom.xml
実装
easyapp
web側から呼ばれるAPIを実装します。
pom.xml
<build>内をコメントアウトします。
controller/UserController.java
固定メッセージを返すAPIを実装します:
package nob.example.easyapp.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* ユーザ情報向けコントローラークラスです。
*
* @author nob
*/
@RestController
@RequestMapping(value = "/api/v1")
public class UserController {
/**
* 挨拶メッセージを返します。
*
* @return 固定メッセージ
*/
@GetMapping(value = "/message")
public String message() {
return "Hello, nob!";
}
}
easyweb
easyappを呼び出し、その結果を表示する画面を提供します。
pom.xml
easyappを依存関係に追加します:
<dependency>
<groupId>nob.example</groupId>
<artifactId>easyapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
EasywebApplication.java
スキャンするパッケージを指定し、easyappを認識できるようにします:
package nob.example.easyweb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = { "nob.example" }) // スキャンするパッケージを明示的に指定
public class EasywebApplication {
public static void main(String[] args) {
SpringApplication.run(EasywebApplication.class, args);
}
}
web/UserPage.java
easyappのAPIを呼び出し、htmlコンテンツを返すクラスです。
package nob.example.easyweb.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import lombok.NonNull;
import nob.example.easyapp.controller.UserController;
/**
* ユーザ向けページクラスです。
*
* @author nob
*/
@Controller
public class UserPage {
@NonNull
private UserController userController;
public UserPage(UserController userController) {
this.userController = userController;
}
/**
* ユーザ向けメッセージを表示するページを返します。
*
* @return ユーザ向けメッセージ表示コンテンツ
*/
@GetMapping(value = "/message")
String message(Model model) {
model.addAttribute("message", userController.message());
return "message";
}
}
templates/message.html
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Easy project</title>
</head>
<body>
<div th:text="${message}"></div>
</body>
</html>
easyproject
app, webを統括します。mvn関連のファイルを下記コマンドでプロジェクトのルートディレクトリ直下にコピーしてください:
mv mvnw* .mvn ..
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nob.example</groupId>
<artifactId>easyproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>easyweb</module>
<module>easyapp</module>
</modules>
</project>
起動
プロジェクトのルートディレクトリで下記を実行することでアプリが起動します。easyappを参照するeasywebを起動します:
./mvnw install && ./mvnw spring-boot:run -pl easyweb