Java

SkaffoldとHelmを使い環境の設定を切り替えてk8sリソースをデプロイする

はじめに 以前のブログでSkaffoldのローカルでの開発機能を試しました。もちろんSkaffoldはローカルでの開発をサポートするツールにとどまらず、テストやビルド、デプロイなどもサポートしています。 デプロイをおこない場合は環境ごとの変数をうまく切り替…

jcmdで何ができるかをまとめる

はじめに jcmdは起動しているJavaプロセスのGCの統計情報をとったり、JFR起動したり諸々のことを行なうのによく使われるツールかと思います。 今まで必要になったコマンドを調べて使うぐらいしかしたことなかったのですが、実際どのくらいのことができるのか…

Skaffoldを用いてローカルでk8sにデプロイするJavaアプリの開発を行なう

はじめに 最近身の回りでSkaffoldという名前をよく聞くようになりまして、ちょっと気になって調べたら面白そうだったし、今後使っていきそうな雰囲気を感じたので、ちょっとさわっておこうかと思います。 Skaffoldとは? Skaffoldはk8sネイティブなアプリケ…

Spring Boot 2.5についてメモ

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

JITWatchを動かしてみる

はじめに ちょっと前のどこかのイベント(おそらくJJUG)でJitWatchというのが紹介されていて、ちょっと気になってました。 このブログではJITWatchを動かして見ようかと思います。 紹介動画とかみつつ、自分の理解をまとめています。正確な情報は公式のGitH…

QuarkusのDevServicesを試す

はじめに 先日、Quarkusの1.13がリリースされので、リリースブログを眺めていたのですがDevServicesという便利そうな機能が追加されていたので試してみようかと思います。 DevServicesとは DevモードでQuarkusを起動した場合、追加の設定無しでDBを起動して…

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

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

MandrelでQuarkusのアプリをネイティブイメージ化する

はじめに Quarkusのネイティブイメージ化したアプリを作ったことなかったのと、Mandrelという名前自体は聞いていたのですがQuarkusに関係するGraalVMぐらいの理解でしか無かったので、ちょっとまとめて動かしてみようかと思います。 基本的にはQuarkusのガイ…

S3 AWS SDK for JavaでMinIOのバケットとオブジェクトを操作する

はじめに 前回の記事でMiniIOを動かしてみたのですが、Javaのクライアントをいくつか試して見たいと思って、この記事ではAamazon SDKを使ってみようと思います。 前回同様MiniIOはDockerを用いて立てます。 使ってみる 環境 今回のプログラムを動かす環境は…

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

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

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

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

Nettyの主要コンポーネントを整理する

はじめに Nettyを勉強していると、EventLoopやHandlerなど様々なコンポーネントがでてきて、混乱したのでちょっと図でまとめてみようと思います。このブログでは以下のようなNettyの主要コンポーネント(クラス or インターフェース)の役割をまとめそれぞれ…

NettyのChannelInboundHandlerとChannelOutboundHandleについてまとめる

はじめに Netty In Actionを読んでいて、それぞれがのハンドラーがどのどのタイミングで実行されるかが分かりづらかったので、自身の頭の中の整理を目的に自分の理解をまとめて見ようと思います。 Inbound? OutBound? ChannelPipelineでは、ソケットとアプ…

Nettyでエコーサーバーを書く

はじめに 最近、Netty in Actionを読んでいるのですが、生のNettyを今まで触ったことがなかったのでHello, Worldとして、Echoサーバを書いてみたいと思います。あまり、Netty全体の要素に対して深堀すると言うよりはひとまず動かすのを目指し、その中で必要…

Spring Boot 2.4.0についてメモ

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

QuarkusアプリのメトリクスをMicrometer+Prometeus+Grafanaで可視化する

はじめに Quarkus 1.9のリリースブログをなんとなく眺めていると以下のようなことが書かれていました。 Micrometer extension maturing 1.8 introduced a new Micrometer extension. During the 1.9 development cycle, it matured a lot and is now the rec…

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…

QuarkusでHealth Checkのエンドポイントを作成する

はじめに KubernetesにはLiveness ProbeをReadiness Probeといった概念があり、アプリケーションにそれぞれを確認するためのエンドポイントを作成する場合があります。 Spring Boot(2.3以上)などではそのエンドポイントが用意されていますが、Quarkusにもそ…

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

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

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

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

VisualVMを使ってみる

はじめに Javaのプロセスをプロファイルするツールはいろいろあると思うのですが、個人的にVisuralVMが気になったので、調べてまとめます。 具体的には以下のようなことを目指します。 VivualVMの概要を知る どのようなことができるかを知る 実際に使ってみ…

QuarkusでReactiveなWebAPIを書いてみる

はじめに Reactive Stream系のものはSpring WebFluxしか触ったことが無かったのですが、QuarkusにもReactive Routeというのがあるというのを知り使ってみたくなったので、その機能を試してみたいと思います。 Reactive RouteとSmallrye Mutiny まず、Quarkus…

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

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

QuarkusのログをJson形式で出力する

はじめに ログコレクターでアプリの情報収集する場合、Jsonでログが出力されている方が何かとやりやすいことがありますがQuarkusでもログの出力をJsonに変えることができます。 ログをJsonに変更する 依存の追加 適当にQuarkusプロジェクトを作成し、以下の…

QuarkusのアプリにJWT RBACを追加する

はじめに Quarkusのアプリケーションを作ったことが無かったので、エコーサーバを作りたいと思います。ただ、エコーサーバ作るだけだと面白くないので、JWT認証と合わせてやってみようかと思います。 以下のようなことを目標にします。 Quarkusのプロジェク…

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)という考え方を耳にはさみ…

GraalVMのNative ImageでReflectionを使う

はじめに よくSpringのアプリケーションをNative Image化するときDynamic ProxyやReflectionをゴリゴリ使っているので、設定が大変みたいな話を聞いたことがあるのですが。 じゃあ、実際に使うためにはどんな設定が必要なんだろう。というのが気になったので…