mike-neckのブログ

Java or Groovy or Swift or Golang

spring

Slack の Bolt フレームワークを Spring Boot + Kotlin で試してみた

Slack の Bolt フレームワークが Java でもリリースされたということなので、早速試してみた Bolt は最先端の Slack アプリをつくるためのフレームワーク。これまでの JavaScript に加えて、今日 Java バージョンもリリースしました! ☕ 早速試してみてくだ…

Spring Batch を Spring Boot で作った場合のプロセスの終了コード(exit code) の設定の仕方

Spring Batch で終了コードを設定する方法を調べると、おそらく次の資料に出くわす docs.spring.io terasoluna-batch.github.io ただ、 Spring Boot で Spring Batch を作る場合はこの方法では多分うまくいかない。これらの資料では Spring Batch にある Com…

SpringBoot 2.3.0.M1 で buildpack による Docker image 生成ができるようになってたので試してみた

表題の通り、簡単に試してみた。 以下、手順。

デフォルトプロファイルでログレベルを debug に設定しないほうがよい話

3 年間勤務した L is B を退職しました。 L is B で最後に組み立てていたプログラムが SpringBoot のアプリケーションでした。そのアプリは WebFlux にしていたため、データの動きが非常にわかりづらく、開発中はデータの流れを追えるように debug ログを出…

Spring の Scheduling Task で柔軟にタスクの実行開始時間を指定する

現在作っているもので、タスクの開始時間を柔軟に行えないか調べていたら、普通に Spring のドキュメントに書いてあり、実験の結果をメモした。 docs.spring.io なお、ここに書いてることは多くのケースでは使わないし普通のスケジューリングで十分だと思っ…

Functional Spring Hands On に行ってきた

表題の通り、 Functional Spring Hands On に行ってきた。 pivotal-japan.connpass.com ハンズオンの資料はこれ github.com 基本的に手を動かさないと理解が遅いので、わりとハンズオンは好きです(用意する方は大変) 内容は、 Spring(WebFlux) アプリケーシ…

resilience4j の RateLimiter を少しだけいじった

resilience4j の RateLimiter を少しだけいじったので、そのメモ。 ここの実装はダメな実装になってるので、ちゃんとした使い方を調べてる人は他をあたった方が良い(強く推奨)。

Spring WebFlux + r2dbc + Kotlin でデータベーストランザクション

前回 ReactiveCrudRepository を使ったアプリケーションの話をしたが、残念なことに今の所トランザクションを指定できないので、アプリケーションを終了したら、データはなくなるし、複数のテーブルへの操作をアトミックな操作として指定できないことをメモ…

Spring WebFlux + r2dbc + Kotlin で簡単なアプリケーションをつくる

5日間休みなので、おさらいも兼ねて、久々に Spring をさわることにしている。なお、 Kotlin にしているのもおさらいを兼ねている。また Kotlin coroutine を使っていないのは r2dbc-postgres と組み合わせたときに、 ByteBuf の readableBytes がレスポンス…

Spring WebFlux の Router Function のテスト

久々に Spring WebFlux を書いてたのだが、いまいちルーティングがうまくできず、 Routing Function に対してテストを書いてみることにした。 で、テストの書き方を調べてみたのだが、とりあえず何も見つからなかった(サーバーを起動するパターンは見つかっ…

Component の インデックススキャンでどれくらい速くなるか計測してみた #jsug

JSUG のLT会で 『Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた』というタイトルでLTしてきたところ、 Spring 5 から @Component のインデックススキャンがサポートされるようになったことを教えてもらったので、試してみました。 …

Spring WebFlux Security のカスタム認証

Spring WebFlux Security でカスタム認証を実装します。ベースとなるユーザー認証部分は以前に実装したとおりです。 mike-neck.hatenadiary.com 今回は権限まわりの実装します。〜〜のパスには〜〜の権限が必要みたいなやつです。 特定のリソースへの特定の…

Spring WebFlux で Mono が empty の場合に404 を返す

Spring WebFlux フレームワークは戻り値の方は Mono<V> になるのだが、この Mono<V> が empty の場合、Spring 側でよしなにやってくれると思ったら、実はそうでもないらしい。 例えばこのようなハンドラーを作ってみる Mono<ServerResponse> test(final ServerRequest request) { f</serverresponse></v></v>…

Spring WebFlux Security で ユーザー認証を実装する + ハンドラーでユーザーの情報を取り出す

Spring Security の WebFlux Security Configuration という公式のドキュメントにあるセクションにも書いてあるのだが、ユーザー認証の実装はこれまでの Spring Security にある UserDetails の Reactive 版である ReactiveUserDetails を実装したオブジェク…

Spring Web Flux を少しさわってみただけの話

Spring 5 から Reactive Web というのになるらしく、サーバーの性能が落ちにくくなると聞いた(違うかもしれない)ので、 家で試してみることにした。 環境 Spring Boot: 2.0.0.RC1 Java: 1.8 ビルドファイル 以下の curl コマンドで取得できるもの curl https…

同一のURLに同じHTTPメソッドで異なるパラメーターを送った時に異なるメソッドを割り当てる

同じURL(/foo/bar)に異なるメソッド(baz(Baz baz) と qux(Qux qux) の二つのメソッド)を割り当てる方法 @Canonical class Text { String text } @Canonical class Bidirecional { String question String answer1 String answer2 } @Canonical class Result<T> </t>…

spring-security-oauth を用いて実装したリソースサーバーでのトークンの有効期限

spring-security-oauth を用いてリソースサーバーを実装する場合、 tokenServices という名前の ResourceServerTokenServices を実装するクラスのビーンを作ります。これを実装する時に気をつける必要があるのが、 ResourceServerTokenServices に、 loadAut…

Spring Boot CLI にて Spring Security OAuth2 によるリソースサーバーの実験

Spring Security OAuth2 を用いたリソースサーバーを、データベース連携で実装するパターンの実験をしてみた。 spring-security-oauth のドキュメント の Resource Server Configuration の部分を読むとリソースサーバーの実装については、次のように書いて…

Spring MVC で日本語URLにリダイレクトするとURLが文字化けしてしまう場合の対処

Spring MVC で日本語を含むURLにリダイレクトすると… @GetMapping(path = "bar") String somePage() { return "redirect:/to/日本語url"; } $ curl -v http://localhost:8080/foo/bar * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) por…

Spring Rest Repositories + JPA で @ManyToOne で指定されているフィールドを用いて検索するリクエストを投げる

ドキュメント探しても、ググってもstack overflowを探しても明確に書かれていなかったっぽいので(本来的には hal の仕様を見るのが正しいかもしれない) 次のような二つのエンティティが存在するものとする。 @Entity class Book { @Id private Integer id; p…

SpringのRestTemplate で Rest Repository が返す application/hal+json からオブジェクトを取得する

何か日本語でなかったため。 実行するのは spring-web が jar にある Java SE 環境(Spring context は存在しない)。 必要なライブラリー org.springframework.hateoas:spring-hateoas とその依存ライブラリー 使ったバージョン spring-core: 4.3.13.RELEASE …

Spring Data REST(+ Spring Data JPA)でPOSTする時のメモ

Spring Data REST + Spring Data JPA で こんなエンティティを作る。 @Entity public class User { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String name; } @Entity public class Message { @Id @GeneratedValue(strategy = IDE…