GeekFactory

int128.hatenablog.com

spring

Springでリクエストとレスポンスのログを出力する

Spring MVCでリクエストとレスポンスのログを出力する方法を説明します。 リクエストログだけなら CommonsRequestLoggingFilter もしくは AbstractRequestLoggingFilter を使う方法が簡単です。詳しくは下記の記事で説明しています。 int128.hatenablog.com …

ZipkinのトレースIDを生成して引き継ぐ

ZipkinのトレースIDを引き継ぐ方法のメモです。 ブラウザ or 外部サービス ↓ フロントエンド(トレースIDを生成) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI(トレースIDを中継) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI フロントエンドがPHPの場合は以…

Spring Security OAuthにおけるアクセストークン取得失敗時の例外

Spring Security OAuthでアクセストークンの取得に失敗した場合のリトライを設計するため、エラーケースと例外の対応を調べてみました。 アクセストークンの取得をリトライするには以下の2つの方法があります。 アクセストークン取得(AccessTokenProvider#o…

Spring MVCで所要時間付きのリクエストログを出力する

Spring MVCのアプリケーションでリクエストログを出力するには CommonsRequestLoggingFilter を使うと簡単です。 リクエストログの設定 Spring Bootの場合は以下のように設定します。 @Configuration public class AppConfiguration { @Bean public CommonsR…

Spring Bootアプリケーションのログファイル運用

Spring Bootアプリケーションのログファイル運用についてメモ。 前提 EC2などのクラウドのインスタンスで運用する場合を想定する。 ログ基盤に転送して蓄積する。 インスタンスに残っているログファイルは基本的に見ない。 Spring Bootのログ Spring Bootの…

Spring BootでログやActuatorにバージョン情報を含める

ログやActuatorにバージョン情報を含めておくと、本番環境でどのバージョンのアプリケーションが実行されているか簡単に確認できるので便利です。 ビルド時にapplication.ymlにバージョン情報を含める Gradleでは、以下のようなビルドスクリプトを書くとappl…

Spring Security OAuth2でリクエストログを出力する

Spring Security OAuth2でアクセストークンのリクエストとレスポンスのログを出力するには、Apache HttpClientを使うと簡単です。 概要 Spring Security OAuth2のアクセストークン取得はRestTemplateを利用しています。 RestTemplateはデフォルトではHttpURL…

doma-spring-bootのSQL例外変換

doma-spring-bootを利用すると、Doma2の例外クラス(JdbcException)をSpring Transactionの例外クラス(DataAccessException)に変換してくれます。例外変換の仕様が明文化されていないようなので調べてみました。どこかにまとめてあったら教えてください。…

Spring BootアプリのテストをSpockで書く

Spring BootアプリケーションのテストをSpockで書く方法を説明します。最近のバージョンを対象にしています。 Spring Boot 1.4 Spock 1.1-rc-3 Groovy 2.4 本稿では以下のテストレベルを対象とします。 コンポーネントテスト(依存コンポーネントをモックに…

FeignでOAuth 2.0クライアントを使う

RESTクライアントのSpring Cloud Netflix FeignでOAuth 2.0を使う方法を説明します。 @FeignClientのconfigurationでOAuth2FeignRequestInterceptorを設定する。 OAuth2FeignRequestInterceptorにクライアントIDやクライアントクレデンシャルを渡す。 具体的…

Feignでレスポンスボディによる例外処理を行う

REST APIクライアントのSpring Cloud Feignを使う場合に異常系のステータスコードをハンドリングする方法を調べたのでメモです。 デフォルトの振る舞い APIが400番台や500番台のステータスコードを返した場合、FeignはFeignExceptionをスローします。これは…

Spring Bootで例外発生時にJSONを返す

Spring BootのREST APIサーバで例外発生時のエラー情報をJSONで返す方法を調べたのでメモです。 やりたいこと 例外が発生した場合は常にエラー情報をJSONで返したい。 例外の種類によってステータスコードを分けたい。例えば、バリデーションエラーが発生し…

Spring Cloud Feignのステータスコードと例外

Spring Cloud Feignの例外を調べてみたのでメモします。 (11/22修正)Root Causeのスタックトレースしか貼り付けていなかったので、すべてのCauseに修正しました。 結果 エラーのステータスコードを受け取った場合、 feign.FeignException が発生します。 …

宣言的APIクライアントSpring Cloud Feignを使ってみる

Spring Cloud Feignを利用すると、Spring MVCと同じアノテーション(@RequestMapping)を使ってAPIクライアントを定義できます。同じアノテーションが使えるので学習コストを抑えられるメリットがあるでしょう。また、APIサーバとAPIクライアントの仕様が同…

REST APIの例外設計

REST APIを設計する場合に、エラーをどのステータスコードで返却するか議論になることがあります。例えば、以下のような場合が挙げられます。 キー指定のリクエストでDBにデータがない場合(例: GET /books/1 ) 一覧のリクエストでDBにデータがない場合(…