本ハンズオンで、次の図のような簡易家計簿のAPIサーバーをSpring WebFlux.fnを使って実装します。 あえてSpring BootもDependency Injectionも使わないシンプルなWebアプリとして実装します。
ハンズオンコンテンツ
- はじめに
- 簡易家計簿Moneygerプロジェクトの作成
- YAVIによるValidationの実装
- R2DBCによるデータベースアクセス
- Web UIの追加 👈
- 例外ハンドリングの改善
- 収入APIの実装
- Spring Bootアプリに変換
- GraalVMのSubstrateVMでNative Imageにコンパイル
Web UIの追加
APIに対するWeb UIを追加します。
pom.xml
に次のrepository
を追加してください。
<repositories>
<!-- 追加 -->
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<!-- ... -->
</repositories>
pom.xml
に次のdependency
を追加してください。
<dependency>
<groupId>com.github.making</groupId>
<artifactId>moneyger-ui</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
App.java
に次のメソッドを追加してください。
static RouterFunction<ServerResponse> staticRoutes() {
return RouterFunctions.route()
.GET("/", req -> ServerResponse.ok().bodyValue(new ClassPathResource("META-INF/resources/index.html")))
.resources("/**", new ClassPathResource("META-INF/resources/"))
.filter((request, next) -> next.handle(request)
.flatMap(response -> ServerResponse.from(response)
.cacheControl(CacheControl.maxAge(Duration.ofDays(3)))
.build(response::writeTo)))
.build();
}
routes
メソッドを次の箇所を
static RouterFunction<ServerResponse> routes() {
// ...
return new ExpenditureHandler(new R2dbcExpenditureRepository(databaseClient, transactionalOperator)).routes();
}
次のように変更してください。
static RouterFunction<ServerResponse> routes() {
// ...
return staticRoutes()
.and(new ExpenditureHandler(new R2dbcExpenditureRepository(databaseClient, transactionalOperator)).routes());
}
App
クラスのmain
メソッドを実行して、http://localhost:8080にアクセスしてください。
Cloud Foundryにデプロイ
ビルドしてcf push
してください。
./mvnw clean package -DskipTests=true
cf push
Kubernetesにデプロイ
$ pack build <image-name> --builder cloudfoundry/cnb:bionic --publish
# 例: pack build making/moneyger --builder cloudfoundry/cnb:bionic --publish
または
$ ./mvnw clean package -DskipTests=true
$ pack build <image-name> -p target/moneyger-1.0.0-SNAPSHOT.jar --builder cloudfoundry/cnb:bionic --publish
# 例: pack build making/moneyger -p target/moneyger-1.0.0-SNAPSHOT.jar --builder cloudfoundry/cnb:bionic --publish
を実行して、
kbld -f moneyger.yml | kubectl apply -f -
を実行してください。
興味があれば自分の好みのUIを実装してください。