Spring

Spring Boot 2.5についてメモ

はじめに 今週(2020/5/20)にSpring Boot 2.5が出ましたが、どんなのが出たのかまとめて、なんとなく違いを把握おこうと思います。 基本的にはRelease Notesの内容を個人的に気になったところを少し深ぼって、自分の理解をまとめようと思うので、正確な情報は…

k8s上のSpring Bootアプリからメトリクスを取得する(Actuator + Prometheus Operator)

はじめに Kubernetes上でのSpring Bootのアプリのデバックを行なう際にPodのコンテナ内に応じて必要なコマンドとってきて、スレッドダンプやヒープダンプを取得してホストにコピーみたいなことをやっていたのですが、流石に面倒に感じはじめました。 そこで…

Jaegerでk8s+Istio上のアプリ(Quarkus、Spring)を分散トレーシングする

はじめに 分散トレーシングをやる際にJaegerというツールがあって、試してみたいと思って試せていなかったのやってみようと思います。今回はMinikubeで作ったクラスターにIstioをデプロイして、 その環境でのトレーシングを行ってみようと思います。 Istioに…

Reactor Publisherにおけるエラーハンドリング

はじめに 前回に引き続き、Reactive Springのを読んでいて、Publihsherのエラーハンドリングを行なうためのメソッド群が紹介されていたので、実際に動かして試してみようと思います。(書籍で紹介されていないものも結構あったので) 実際にやってみる 環境…

非Reactiveな非同期処理をFluxで扱う

はじめに Reactive Springを読んでいて、Flux.create()を使えば非Reactiveな非同期のイベントをReactiveのProducerにアダプトすることができるみたいなことが書かれていたので、実際に使って見て理解を深めたいと思います。 Flux.create()? Flux.create(Cons…

Spring Boot 2.4.0についてメモ

はじめに 先週、(2020/11/12)にSpring Boot 2.4が出ましたが、どんなのが出たのかまとめて、なんとなく違いを把握おこうと思います。 基本的にはリリースブログとRelease Notesの内容を個人的に気になったところを少し深ぼって、自分の理解をまとめようと思…

Spring REST DocsとSpring Cloud Contractを連携して使ってみる

はじめに Spring REST DocsはSpringのRestFullアプリケーションにおけるWebAPIのインターフェースをドキュメント化する際のサポートをしてくれます。Spring MVC Testをもとにスニペットを自動生成し、Asciidoctorの形式で出力してくれます。 また、Spring Cl…

RouterFunctionでリクエストをインターセプトする

はじめに Router Functionを利用しているときのサーブレットフィルターとかインターセプターみたいなのってどうやってやるんだろって言うのが気になったのでちょっと調べてみます。 やってみる 環境 環境は以下の通り $ java --version openjdk 15 2020-09-1…

RouterFunctionでグローバルにエラーハンドリングして任意のレスポンスを返す

はじめに @ControllerAdvanceや@ExceptionHandler,を使ったグローバルなエラーハンドリングはやったことがあったのですが、そういえばRouterFanctionでやったことなかったなと思い試してみたいと思います。 やってみる ざっくりやること 大きく2つのやること…

Spring WebFluxでブロッキング処理を書く

はじめに てっきり、WebFluxのようなReactiveの場合、ハンドラーみたいなのはEventLoopとは別スレッドで動いているもんだとばかり思っていたのですが、どうやらそうではないようで、悪気なくリソースクラスとかでブロッキングするような処理を書いてしまいリ…

WebFluxのFluxレスポンスをテストする

はじめに 表題通りなんですが、よくやり方を忘れるのでメモしておきます。 手順 手順としては簡単で 1.WebTestClient.ResponseSpectのreaurnResultを呼び出し、FluxExchangeResultを受け取る。 2. FluxExchengeResultのgetResponseBody()を呼び出してFluxを…

Spring Cloud Contractをnon-JVMの言語で使う

はじめに Spring Cloud ContractはCDC(Consumer Driven Contract)をサポートするSpring Cloud傘下のプロジェクトです。 このプロジェクトはJavaのプロジェクトであることにより、初期の段階では、JVM言語以外での利用ができない状況でした。しかし、その場合…

AppCDSを使ってみる

はじめに AppCDS(Application Class Data Sharing)はCDS(Class Data Sharing)の拡張であり、Java 10以降で利用可能です。この機能を使うことで、アプリケーションでロードされるクラスを共有アーカイブから読み込むようになり、その起動時間を削減することが…

Spring Cloud ContractでCDCする

はじめに マイクロサービスで、E2Eテストを書く際にマイクロサービスが依存するマイクロサービスを立ち上げるのが面倒だったり、時には現実的では無い場合があるなぁと最近感じてます。 そんな中でConsumer Driven Contract(CDC)という考え方を耳にはさみ…

Springのプロジェクトをマルチモジュール構成で作る

はじめに Mavenではプロジェクトをマルチモジュール構成に構築することは可能ですが、Spring Frameworkでもその機能を利用することが可能です。 この辺の機能はあまり触ったことがなかったので、触ってみたいと思ったがのがこのブログのモチベーションです。…

Spring Cloud Circuit Breaker(Resilience4j)を試す。

はじめに CircuitBraekrの実装はNetflixのNetfix Hystrixが有名です。Spirngでもいくつかの実装を組み込めるようになっており、Spring Cloud傘下のプロジェクトとして公開されています。Springで使えるCircuit Breakerの実装はいくつかありますが、その中で…

RscoketとSpring Secutiryの組み合わせを試す。

はじめに Rsocketとはアプリケーションレイヤーのプロトコルです。テキストベースのプロトコルであるHTTPとは違いバイナリベースでもデータの送受信を行います。また、RsocketはUDP、TCP、WebSocketなど複数のプロトコル上での実装があります。 その他にも以…