kagamihogeの日記

kagamihogeの日記です。

dockerでS3互換のMinIOを起動してJavaからアクセス

概要 ローカル開発環境のdockerでS3を起動してJavaからアクセスする。 MinIO https://min.io/ を使用する。dockerhubは https://hub.docker.com/r/minio/minio サンプルコード docker run とりあえず最低限の動作確認を行うためのコマンド。 docker run -p 9…

WebFluxでBindingResultをWebExchangeBindExceptionに書き換え

WebFluxではWebMVCのようにメソッド引数でBindingResultでvalidation結果を取得できないので、その書き換え方について。 WebMVCではcontrollerでvalidation結果を取得するにはメソッドの引数にBindingResultを追加する。例えば以下のようなコードになる。以…

spring-bootでControllerAdviceのExceptionHandlerが呼ばれるまでの流れ

spring-bootでは@ControllerAdvice / @RestControllerAdviceによりcontollerの例外処理を一か所にまとめられる。このエントリでは例外が発生してadviceのメソッドが実際に呼び出されるまでのコードを追う。 ソースコードのバージョンはこれを書いてる 2024/1…

全焼日記

2023年のある日、私が居住していた賃貸アパートが全焼した。 はじめに 必ず日常は取り戻せる 将来、住宅火災に見舞われた方がこの日記にたどり着くかもしれない。私と同じように住宅火災で家屋を失った方向けの文章からまず始める。一言で言えば、必ず日常は…

Hibernate Validatorの実行順序と制御

概要 Hibernate Validatorで複数のconstraint annotationを指定順序で実行し、また、あるannotationが失敗したらそこでvalidationを終了する方法について。 背景 spring-boot-starter-validation というかHibernate Validatorはconstraint annotationにデフ…

spring-bootでlogstash-logback-encoderを使用してログをJSON形式にする

基本的な使い方のサンプルコード plugins { id 'java' id 'org.springframework.boot' version '3.3.1' id 'io.spring.dependency-management' version '1.1.5' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = J…

SpringBootTest + Testcontainersの親クラスで設定共通化による高速化

背景 Testcontainersでspring-bootのテストケースが増えると複数のクラスに分割したくなる。しかし、単純に複数のテストクラスを作成しただけだと、コンテナ(とspring-bootも)も複数個起動してしまいテストの実行時間が増えてしまう。 よって、Testcontain…

Testcontainers + Oracle Database 21c XEの初期化SQL実行

基本形 以降の記述は以下の基本形をベースに進めていく。 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.3.0' id 'io.spring.dependency-management' version '1.1.5' } group = 'com.example' version = '0.0.1-SNAPSHOT' ja…

spring-boot 3.2 + Resilience4J

spring-boot + Resilience4J を試す。 事前準備 mockoon https://mockoon.com/ バックエンドAPIの挙動をあれこれ試すのに何らかのmockserverがあると便利。今回はGUIであれこれ変更しながら試すのに便利なmockoonを使用した。 ソースコードおよび解説 https:…

火災後のセントリーの耐火金庫の新品交換

マスターロック・セントリー日本株式会社が販売している耐火金庫は、火災の被害が発生した場合、以下のサポートQ&Aにあるように所定の手続きを踏めば新品と交換できる。 www.sentryjp.com ライフタイムワランティーとは何ですか? 万一火災で金庫が燃えてし…

住宅火災における川崎市の市税減免の審査基準と手続

川崎市には天災および人為的災害で家屋や家財に損害が発生した場合に市税の減免を受けられる場合がある。ただ、減免額が「被災の状況に応じて8分の1から全額まで」とあるのみで、どういう基準なのかは記載が無い。 なお、以下の記述は賃貸住宅の罹災経験に基…

Testcontainers + Spring Boot 3.1 + Oracle XE

従来 Testcontainers とspring-bootを組み合わせる場合は @DynamicPropertySource で接続URLプロパティなどを置き換える処理がやや煩雑だった。しかし https://spring.io/blog/2023/06/23/improved-testcontainers-support-in-spring-boot-3-1 によると有名…

Spring Cloud Stream(RabbitMQ)でhello-worldレベルのconsumer

Spring Cloud StreamをRabbitMQと組み合わせて、RabbitMQ管理画面から文字列をpublishしてspringアプリケーションでconsumeするだけのサンプルを作成する。 ソースコード・手順 build.gradle https://start.spring.io/ でCloud Stream, Spring for RabbitMQ…

spring-integrationでcommons-ioを使用したファイルのtail

Spring Integrationでファイルのtailを実現する。デフォルトではOSのtailコマンドを実行するが、設定によりOS非依存のApache Commons IOに切り替えられる。今回はそのサンプルコードについて。 ソースコードなど build.gradle https://start.spring.io/ を使…

gradleのversion catalogでsubprojectで共通のバージョンを定義

JJUG CCC 2023 Spring で最近のGradleにはversion catalogというmultiple projectでバージョン定義を共有する仕組みがあるのを知った。その時に講演していた方のプレゼン資料は Gradleと仲良くなる第一歩 ~小規模PJから大規模PJへ~ にある。 https://docs.…

HTTP Interface(WebClient)のリトライ

build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly …

MyBatis ThymeleafのSQL Generator

MyBatis ThymeleafのSQL生成機能であるSQL GeneratorはMyBatisとは独立して使用できる。基本的には他のO\Rマッパーと共に使用する。今回はmybatis-thymeleaf単体で使用可能な事を示すためにあえて他の依存性は何も追加せずにSQL生成のみ試す。 ソースコード…

Spring Batch 5さわる

Spring Batchは5.0から色々な変更が入った事を最近知った。 docs.spring.io What's new in Spring Batch 5 from ikeyat www.slideshare.net なので、良くやる設定などでとりあえず触ってみる。何分初めてさわるバージョンなので間違ってる事書いていたら申し…

Spring SecurityのForm認証

Spring BootでSpring Securityを使う場合はauto-configurationで様々な設定が自動で行われ、そのサマリは 公式ドキュメントにある。よくあるForm認証はそこに設定を追加・修正で行う。また、デモ・開発用の設定が最初から有効なので何も設定無しでも一応の動…

Selenium Gridをdockerで使う

Selenium Gridをdockerコンテナでリモートブラウザを起動するやり方で使用する。 ソースコードと手順 docker-compose.yml DockerでSelenium Gridを構築してクロスブラウザテストを自動化するを参考にdocker-compose.ymlを作成する。 version: '3.8' services…

Apache Commons Poolのサンプル

object poolを自力で実装する機会は余りないが、Apache Commons Poolが便利な局面があったのでその使い方をメモしておく。 plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } gro…

spring-bootのSOAP web serviceクライアント

Getting Started | Consuming a SOAP web serviceを基に、SOAP Webサービスから生成したクラスを使用してサービスにアクセスする。 事前準備 SOAP Webサービスは以前に作成したこちらを使用する。 kagamihoge.hatenablog.com 手順 gradle https://start.spri…

Eclipse + Payara + SOAP Web Service

検証用の適当なSOAP Web Serviceが必要になったので試しにPayaraで作成した時のメモ。 事前準備 各種ソフトウェアのダウンロード。 jdk - https://www.oracle.com/java/technologies/downloads/ - latestなら動くと思うが必要に応じて対応バージョンをチェッ…

WireMockのResponse Templatingでレスポンスを動的に書換

WireMockはresponse-templatingによりレスポンスを書き換えられる。以下にspring-bootの@SpringBootTestを前提にしたサンプルコード・使い方について書く。 ソースコード build.gradle plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spri…

DGS Frameworkのチュートリアルレベルをやる

DGS FrameworkはNetflixのGraphQLサーバのためのspring-bootベースのフレームワーク。https://netflix.github.io/dgs/getting-started/ のチュートリアルをやる。 やったこと build.gradle https://start.spring.io/ でベースを作ったあとにチュートリアルの…

Spring for GraphQLのチュートリアルレベルをやる

Spring for GraphQL のチュートリアルレベルの事をやる。 やったこと hello world相当 https://start.spring.io/ でgraphql, webの依存性を追加する。build.gradleは下記となる。 plugins { id 'org.springframework.boot' version '2.7.0' id 'io.spring.de…

WebTestClientによるintegration testの記述

spring-bootで作成するweb-apiのintegration test(以下IT)を記述するのにWebTestClientが使える。これは内部的にWebClientを使用する。同様にTestRestTemplateは内部的にRestTemplateを使用する。環境に応じて使い分けになる。今回はWebTestClientによるIT…

spring-boot + MockServer

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-cloud-starter-contract-stub-runner(WireMock)によるintegration test

spring-bootで外部アクセスを伴うweb-apiのintegration testを記述する際は何らかのmock serverを必要とする。ここではmock serverにWireMockを使用し、また、spring-bootとWireMockの連携にSpring Cloud Contractを使用する。WireMock関連の記述は6. Spring…

javaのinitialCapacityの速度差

javaのHashMapなどはコンストラクタでinitialCapacityで指定できる。単純ループでputしたとき速度差が生じるかを見る。 環境 java 17.0.1 やったこと まず、ごく単純なループで固定文字列をputし続け、maxを100万と1000万と変えたときの速度を見てみる。 sta…