Spring Boot
Spring BootのService Connection を使ったTest containersの活用が全然浸透していないように思える。未だにTestcontainersをテストでしか使っていない場合は↓を見てほしい。https://t.co/awwtvJ34vk— Toshiaki Maki ( @ik.am) (@making) 2025年8月30日 spri…
現象 Spring Data RedisのRedisTemplateでstreamのkeyを正しく指定しているはずなのに想定通りに動作しない。下記のようなXREADGROUPコマンド相当を実行するとエラーになり、何故かkeyが文字化けしたエラーメッセージになる。 plugins { id 'java' id 'org.s…
チュートリアル相当 Spring Boot 3.4のstructured loggingサポート紹介エントリ https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot-3-4 をひととおり試す。 plugins { id 'java' id 'org.springframework.boot' version '3.4.6' id 'io.…
以下抜粋の通り、spring-bootはデフォルトでは以下ディレクトリのapplication.propertiesないしapplication.yamlを読み込む。歴史的事情や、リファレンス中にもある通りKubernetes等の事情で、デフォルトの変更が望ましいケースがある。 From the classpath …
https://docs.spring.io/spring-framework/reference/integration/rest-clients.html RestTemplateの後継であるRestClientの使い方について。とはいえ、おおよそは旧来のspringユーザならお馴染みなものが多く、リファレンスを見ればだいたいは事が足りる。…
たとえばoracleでは下記で連番を割り振れる。 CREATE TABLE sample_gen( id number GENERATED ALWAYS AS IDENTITY , value VARCHAR2(100) NOT NULL , CONSTRAINT sample_gen_pk PRIMARY KEY (id) ); import jakarta.persistence.Column; import jakarta.pers…
https://docs.oracle.com/cd/E57425_01/121/ADQUE/aq_intro.htm 環境 Oracle Database 23ai Free Release 23.0.0.0.0 A5:SQL Mk-2 Version 2.20.0 docker run --name oracle_queue -p 11521:1521 -e ORACLE_PWD="Oracle23" container-registry.oracle.com/da…
springのDBアクセスにはJdbcTemplateが従来から存在しており、現在では後継のJdbcClientも利用可能である。ストアドプロシージャにはSimpleJdbcCallを使用する。 本エントリの注意点として、私はあまりOracleのストアドプロシージャに詳しくない。そのため用…
WebFluxではWebMVCのようにメソッド引数でBindingResultでvalidation結果を取得できないので、その書き換え方について。 WebMVCではcontrollerでvalidation結果を取得するにはメソッドの引数にBindingResultを追加する。例えば以下のようなコードになる。以…
spring-bootでは@ControllerAdvice / @RestControllerAdviceによりcontollerの例外処理を一か所にまとめられる。このエントリでは例外が発生してadviceのメソッドが実際に呼び出されるまでのコードを追う。 ソースコードのバージョンはこれを書いてる 2024/1…
概要 Hibernate Validatorで複数のconstraint annotationを指定順序で実行し、また、あるannotationが失敗したらそこでvalidationを終了する方法について。 背景 spring-boot-starter-validation というかHibernate Validatorはconstraint annotationにデフ…
spring-boot 3.4以降 (2025/6/3 追記) https://kagamihoge.hatenablog.com/entry/2025/06/03/165344 基本的な使い方のサンプルコード plugins { id 'java' id 'org.springframework.boot' version '3.3.1' id 'io.spring.dependency-management' version '1.…
背景 Testcontainersでspring-bootのテストケースが増えると複数のクラスに分割したくなる。しかし、単純に複数のテストクラスを作成しただけだと、コンテナ(とspring-bootも)も複数個起動してしまいテストの実行時間が増えてしまう。 よって、Testcontain…
基本形 以降の記述は以下の基本形をベースに進めていく。 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 + Resilience4J を試す。 事前準備 mockoon https://mockoon.com/ バックエンドAPIの挙動をあれこれ試すのに何らかのmockserverがあると便利。今回はGUIであれこれ変更しながら試すのに便利なmockoonを使用した。 ソースコードおよび解説 https:…
従来 Testcontainers とspring-bootを組み合わせる場合は @DynamicPropertySource で接続URLプロパティなどを置き換える処理がやや煩雑だった。しかし https://spring.io/blog/2023/06/23/improved-testcontainers-support-in-spring-boot-3-1 によると有名…
Spring Integrationでファイルのtailを実現する。デフォルトではOSのtailコマンドを実行するが、設定によりOS非依存のApache Commons IOに切り替えられる。今回はそのサンプルコードについて。 ソースコードなど build.gradle https://start.spring.io/ を使…
JJUG CCC 2023 Spring で最近のGradleにはversion catalogというmultiple projectでバージョン定義を共有する仕組みがあるのを知った。その時に講演していた方のプレゼン資料は Gradleと仲良くなる第一歩 ~小規模PJから大規模PJへ~ にある。 https://docs.…
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 …
Spring Batchは5.0から色々な変更が入った事を最近知った。 docs.spring.io What's new in Spring Batch 5 from ikeyat www.slideshare.net なので、良くやる設定などでとりあえず触ってみる。何分初めてさわるバージョンなので間違ってる事書いていたら申し…
Spring BootでSpring Securityを使う場合はauto-configurationで様々な設定が自動で行われ、そのサマリは 公式ドキュメントにある。よくあるForm認証はそこに設定を追加・修正で行う。また、デモ・開発用の設定が最初から有効なので何も設定無しでも一応の動…
Getting Started | Consuming a SOAP web serviceを基に、SOAP Webサービスから生成したクラスを使用してサービスにアクセスする。 事前準備 SOAP Webサービスは以前に作成したこちらを使用する。 kagamihoge.hatenablog.com 手順 gradle https://start.spri…
WireMockはresponse-templatingによりレスポンスを書き換えられる。以下にspring-bootの@SpringBootTestを前提にしたサンプルコード・使い方について書く。 ソースコード build.gradle plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spri…
DGS FrameworkはNetflixのGraphQLサーバのためのspring-bootベースのフレームワーク。https://netflix.github.io/dgs/getting-started/ のチュートリアルをやる。 やったこと build.gradle https://start.spring.io/ でベースを作ったあとにチュートリアルの…
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…
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…
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」と入…