spring-bootで作成するweb-apiのintegration test(以下IT)を記述するのにWebTestClientが使える。これは内部的にWebClientを使用する。同様にTestRestTemplateは内部的にRestTemplateを使用する。環境に応じて使い分けになる。今回はWebTestClientによるIT…
spring-bootのweb-apiのintegration testでMockServerを使用する。 ソースコード build.gradle springとの連携用のmockserver-spring-test-listener-no-dependenciesの依存性を追加する。 plugins { id 'org.springframework.boot' version '2.6.6' id 'io.s…
spring-bootで外部アクセスを伴うweb-apiのintegration testを記述する際は何らかのmock serverを必要とする。ここではmock serverにWireMockを使用し、また、spring-bootとWireMockの連携にSpring Cloud Contractを使用する。WireMock関連の記述は6. Spring…
javaのHashMapなどはコンストラクタでinitialCapacityで指定できる。単純ループでputしたとき速度差が生じるかを見る。 環境 java 17.0.1 やったこと まず、ごく単純なループで固定文字列をputし続け、maxを100万と1000万と変えたときの速度を見てみる。 sta…
Testcontainers はユニットテストの起動と終了と共にdockerコンテナも起動と終了してくれるライブラリ。windowsというかWSL2で動かすには若干の追加設定が必要だった。 環境 windows 10 WSL2 Ubuntu-20.04 Docker version 20.10.11 手順 まず、Docker Deskto…
WSL2上のdockerでMySQLを起動してユニットテストを記述する。Testcontainersでテスト時にコンテナを自動的に開始・終了をする。 環境 windows 10 WSL2 Ubuntu-20.04 Docker version 20.10.11 ソースコード Spring Initializr で「testcontainer」と入力すれ…
WSL2上のdockerでsftpサーバを起動してユニットテストを記述する。Testcontainersでテスト時にコンテナを自動的に開始・終了をする。 環境 windows 10 WSL2 Ubuntu-20.04 Docker version 20.10.11, ソースコード Spring Initializr で「testcontainer」と入…
従来、メタテーブルを永続化しなくするためにMapJobRepositoryFactoryBeanを使う事があったがspring-batch v5.0で削除予定になったようだ。 * @deprecated as of v4.3 in favor or using the {@link JobRepositoryFactoryBean} * with an in-memory database…
gradleで複数プロジェクトを作成すると共通のビルドスクリプトを共有したくなる。方法は場合に応じて色々あるが、ここではcustom pluginをMavenリポジトリにpublishする方法を述べる。動作確認のためにlocalのMavenリポジトリを使うが、publish先をremoteやG…
gradleを7.2にアップデートした際にmavenプラグインをmaven-publishに置き換えた。spring-bootアプリケーションのjarをpublishが出来るようになるまでそこそこ苦労したので過程などを残しておく。 環境 gradle 7.2 java 11 spring-boot 2.5.4 ソースコード -…
単一プロジェクト内のsubproject間の共通設定をpluginにまとめる方法はgradle initでプロジェクト作ればそこに例があるし、自分のblogだと gradle initの複数subproject構成を見る(6.8.3)にまとめている。 ここでは複数プロジェクト間の共通設定をpluginにま…
40代・男性の新型コロナウイルス ワクチン(モデルナ)接種2回目の記録です。 時系列 接種日から数日後まで時系列に沿って、体調の変化やその対処およびその時の心境などを述べる。 7/21 接種日 - 約半日後に急激な発熱 正午頃に2回目の接種を終える。数時間…
javaでextendsの階層を深くしまくったらどうなるか? 理論的な裏付けは特に行わず、とりあえずやってみたら何が起きるか、を見る。 環境 java version "16" 2021-03-16 やったこと こんな感じでひたすらextendsを重ねるクラスを生成し、コンパイルして実行し…
動機 gradle勉強のためgradle initが生成する複数のsubproject構成を見る。基本的には https://docs.gradle.org/6.8.3/samples/sample_building_java_applications_multi_project.html と書いてる事は変わらない。 複数のsubprojectを作る場合はネットをぐぐ…
spring-bootのEnvironmentPostProcessorを実装する事でEnvironmentの初期化処理に後処理を追加可能になる。これでプロパティの初期化をカスタマイズできる。大抵のケースでExternalized Configurationを利用すればプロパティは問題無いが、それでは機能不足…
Testcontainersを使用し、spring-bootのテスト開始時にoracle xeのdockerコンテナを起動してテスト終了時に停止する。 環境 Windows 10 Pro x64 docker desktop 3.1.0 事前準備 oracleのdocker まずdockerでoracleを起動可能にする。 kagamihoge.hatenablog.…
dockerとはいえoracleは結構な起動時間がかかる。下記URLにあるpre-builtにより時間の短縮が見込めるとのことなので試す。 https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/prebuiltdb 環境 Windows 10 Docker …
spring-kafkaのプロパティspring.kafka.consumer.auto-offset-resetの挙動の違いを確認する。 以下はorg.apache.kafka.clients.consumer.ConsumerConfig#AUTO_OFFSET_RESET_DOCの抜粋だけど https://kafka.apache.org/documentation/#consumerconfigs_auto.o…
リファレンスとしては https://cloud.spring.io/spring-cloud-stream-binder-kafka/spring-cloud-stream-binder-kafka.html#kafka-dlq-processing のあたり。 plugins { id 'org.springframework.boot' version '2.4.0' id 'io.spring.dependency-management…
リファレンスとしては https://docs.spring.io/spring-kafka/docs/current/reference/html/#dead-letters のあたり。consumerのエラー発生時に別のtopicにメッセージをpublishする。 plugins { id 'org.springframework.boot' version '2.3.4.RELEASE' id 'i…
spring-kafkaでoffsetを明示的に指定してconsumerを起動する。ドキュメントとしては https://docs.spring.io/spring-kafka/docs/current/reference/html/#topicpartition-initial-offset が参考になる。 plugins { id 'org.springframework.boot' version '2…
各種パターン まず、動作確認用の適当なmainとcontrollerを作成する。 plugins { id 'org.springframework.boot' version '2.4.1' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAP…
Spring BootからApache Kafkaにpublish/subscribeする。 環境 windows 10 docker for windows(wsl2) dockerでkafka起動 qiita.com 上記を参考に構築する。本エントリで関係する書き換え箇所は以下の通り。 KAFKA_ADVERTISED_HOST_NAME - ホストのローカルア…
背景 Javaでキーブレイク*1を意識することはあまり無い。JPAならOneToManyで自動的にコレクションにマッピングされるし、JSONやXMLでも同様である。 今回、spring-batchでO/Rをとある事情で使えずSQLを直接使用、かつ、キーブレイクが必要になった。その実現…
spring securityで独自の認証を実装する | エンジニアっぽいことを書くブログで紹介されているようにAbstractPreAuthenticatedProcessingFilterが使える。このクラスは、javadocによると「外部の認証システムがヘッダーやcookieなどのリクエスト経由で認証情…
https://docs.spring.io/spring-batch/docs/current/reference/html/monitoring-and-metrics.html を試す。 Spring Batch 4.2はMicrometerベースのメトリクスを自動的に収集する。なので、プロパティでそのメトリクスの送信設定をすれば、データがそちらに送…
https://spring.io/projects/spring-cloud-openfeign をさわる。 FeignというRESTクライアントとspringをいい感じに連携する、という代物らしい。 使ってみる Spring Initializrでプロジェクトを作る。dependencyにopenfeignをいれる。あと、今回はレスポン…
Spring Cloud Consulさわる。Service DiscoveryとLoadBalancerのチュートリアルレベルのことをやる。ただし、LoadBalancerの挙動(ex. 2つ以上のserivce切り替えなど)まではやらない。 Consulとは、一言で表現するのが難しい(俺自身が良く理解してない)が…
Spring Cloud Circuit Breaker https://spring.io/projects/spring-cloud-circuitbreaker#overview のチュートリアルレベルのことをやる。 Spring Cloud Circuit Breaker自身は抽象APIを提供するだけで、使う際には具体的な実装を選択する、というタイプ。以…
https://spring.io/projects/spring-cloud-gateway をさわる。はじめてさわるのでpredicateとかfilterとかをいくつか使ってみる。使い方わからなかったやつはさわってない。個人の日記レベルのさわってみた程度なんで、ちゃんとした情報はリファレンスを参照…