すきま風

勉強したことのメモとか

Kotlin

Spring Integration Ftpのexists メソッドがどんなときもTrueを返す件について

なんてアホな子なのだ! 調べた DefaultのExists ModeはFTP STAT なのでここで判定している。 https://github.com/spring-projects/spring-integration/blob/main/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpRem…

Spring WebFlux × Kotlinで NoHandlerFoundException 対策をする

背景 Spring BootでRest APIを作る際、Spring MVCならNoHandlerFoundExceptionがあるため、設定していないURLにRequestが来た場合のハンドリングは ExceptionHandlerで簡単に実装できる。 @RestControllerAdvice class ErrorAdvice { @ExceptionHandler(valu…

AWS SDK for JAVA V2 でS3にMultipart Uploadする

検索してもAWSのサンプルコード以外にヒットしないので需要があるのかわからないけどコードを書いたので記事にします。 localstack で確認していますが、AWSでは動かしていません テスト環境 Library Version Kotlin 1.4.21 Spring Boot 2.4.2 AWS SDK for …

Spring Boot WebFluxでThymeleafを使う

WebFluxのサンプルをネットで探すとAPIの例しか見つからなくて、俺はHTML出力したいんだよ!って思ったので自分で書きました。 Data Drivenは試していない Controller Spring MVC風のやつ。Rendering を返す。Kotlinならsuspend functionにするだけでReacti…

Spring Boot 2.4.0 でMultiple Propertyファイルを適用させる

Spring Boot 2.4になって、application.ymlの書き方がちょっと変わったのでメモ。色々便利になったようなのですが、k8sとか使っていないのであんまり恩恵がない 基本設定をapplication-base.ymlに記述し、環境ごとの差異をそれぞれのapplication-xxx.ymlに…

Multi Module ProjectのSpring Boot × Kotlin Applicationにdetektを導入する

仕事で使うことになったので勉強しました 前回の記事 に適用します。 point ktlintはdetekt-formattingを利用する。そのためにmaven kotlinx repositoryを追加する multi moduleすべてを見るようにinput files を設定する checkでdetektも走るようにする bu…

Multi Module ProjectのSpring Boot × Kotlin ApplicationにgRPCを導入する

Clean Architecture (Multi Module Project) のSpring BootでgRPCを使えるようにします。 仕事で使いそうなので勉強しました。本当はGoで作りたかったけど、誰も賛同してくれなかった。人望/Zero 😉

ぼくのかんがえたさいきょうのJib

現時点で考えたさいきょうのJib設定をメモしておきます。1週間の勉強での結論なのですぐに変わりそうですが コード内の、どうすっかなーみたいなコメントでお察しください。 Jibの記事は一旦これで終了にする予定です。 いままでの記事と同じく、multi-pro…

JibでSpring BootのFat Jarを利用する

Jib Version 2.0.0からFat Jarが正式にサポートされました! Release jib-gradle-plugin v2.0.0 · GoogleContainerTools/jib · GitHub ※ 1.8.0 時点ではFat Jarでの起動をデフォルトでサポートしていなかったので、ExtraDirectoryにJarをCopyしてEntryPoint…

JibでLayer architect な Spring Boot Applicationをdocker imageにする

Spring Boot ApplicationをDocker image化する手段として Cloud Native Build Pack Jib jdeps && jlinkで軽量なDocker imageを作る etc... 等があります。(あります、とか大上段からものを言っていますが、ここ1週間くらいで仕入れた知識です。私はクソ雑魚…

コンテナに存在するかわからないBeanをAutowiredする

Constructor Injection class Foo( private val bar: Bar? ) { } Field Injection class Foo { @Autowired(required = false) lateinit var bar: Optional<Bar> } 前回の記事に関連して小ネタ。@Autowired(required = false)を知らなかったのでメモ。 Constructor</bar>…

Spring Boot × Gradleで自作ライブラリを作る

Spring Bootで自作ライブラリを1から作ったことがなかったので試してみました。 作成するライブラリ 文字列を引数で与えるとPrefixをつけて返してくれるMyTextDecoratorを作成します。 さらにadditionalを定義することで追加で文字列を付けてくれます。 gith…

Configuration annotationのproxyBeanMethodsとBean Lite Modeについての備忘録

記事の概略 SpringのBeanにはBean Lite Modeというものがある Spring 5.2から@Componentの代わりに@Configuration(proxyBeanMethods = false)を指定することでBean Lite Modeにできる CGLIB Proxyが不要ならパフォーマンスがよくなる https://github.com/spr…

Spring Boot 2.2.1以降でWebClientを利用して巨大なResponseを受け取るとDataBufferLimitException が発生する

Spring Boot 2.2.1 (Spring 5.2.1) から、WebClientで256KBを超えるJsonを扱うと DataBufferLimitException が発生するようになりました。Spring 5.1.11 以降でも発生すると思います。 (こっちは自分で試していません) issueはこちら になります。詳細は公式…

クソ雑魚バックエンドエンジニアのフロントエンド開発勉強日誌 1

Thymeleaf HTMLを用意するためにThymeleafを入れます。そこからかよって感じですが、過去にフロントエンド開発をしたときに使っていたフレームワークがCatalyst (Perl製のフレームワーク) で、Thymeleaf経験すら皆無なのでやむなし。 Presenter class テンプ…

Kotlin sealed classを活用したい (願望)

sealed classはクラスの継承を制限するための機構です。 継承を同一ソースファイル内で定義したclassのみに制限します。(Kotlin 1.3) 残念ながら個人的にいまいち使いこなせていない (^^;) のでブログに使用法をまとめてみます。 拡張enumとしての利用 概念…

ファーストクラスコレクションにコレクションのメソッドを委譲する

data class Book( val title: String, val price: Int ) data class Books( private val books: List<Book> ) : List<Book> by books // コレクションメソッドをdelegate // List<Book> -> Books fun List<Book>.toValue() = Books( map { Book(it.title, it.price) } ) fun main() {</book></book></book></book>…

data classのtoString()で特定のフィールドを隠蔽する

https://mustafaali.net/2018/01/14/Kotlin-data-classes-and-sensitive-information/ ラッパークラスにしてあげると良い。 class ProtectedProperty<T>(var value: T) { override fun toString() = "███████████" } data class Customer( val name: String, va</t>…

build.gradle.ktsに移行する! Tips編

以前記事にしたプロジェクトをbuild.gradleからkotlin-dslに移行します。 build.gradle.ktsにすることでスクリプト内でKotlinを使えるようになるし、IntelliJの補完が賢くなるし、groovyの文法をいちいちググらなくてよくなります。Spring Initializrでのデ…

build.gradle.ktsに移行する! 変換編

以前記事にしたプロジェクトをbuild.gradleからkotlin-dslに移行します。プロジェクト構成などについてはそちらを参照ください。 Spring Boot 2.2.0のリリースに伴いコードを書き直しました (最終更新: 2019/11/14) ※ リンクの記事はspring-data-r2dbc など…

Kotlin groupingByって便利だね 2

問題: 生徒オブジェクトのリストがあり、性別ごとの所持金額を集計する data class Student( val name: String, val gender: Gender, val wallet: Int ) enum class Gender { MALE, FEMALE } val students = listOf( Student("foo", MALE, 1000), Student("b…

Kotlin groupingByって便利だね

問題: 生徒オブジェクトのリストがあり、クラスごとの人数を集計する data class Student( val classNumber: String, val name: String ) val students = listOf( Student("1-1", "foo"), Student("1-1", "bar"), Student("1-1", "fizz"), Student("1-2", "b…

Kotlin Coroutineのerror handlingを理解する

Kotlin Fest 2019 での Kotlinコルーチンを理解しよう 2019 が素晴らしかったので、忘れないうちに復習することにします。 サンプルプログラムは前回記事にしたクリーンアーキテクチャのコードを利用しています。

Spring Boot2 × Kotlin × Gradle5でクリーンアーキテクチャのアプリケーションを構築する (実装編)

build.gradleまで書いた前回記事の続きです。Apiをcallした体のプログラムを記述します。

Spring Boot2 × Kotlin × Gradle5でクリーンアーキテクチャのアプリケーションを構築する

要旨 Gradleの勉強。クリーンアーキテクチャを実装してみます。 この記事ではgradleについて記述します。実際のコードについては次回記事を参照ください。 元ネタはSpring IO 2019で紹介されていたこちら 以前書いたレイヤーアーキテクチャのサンプルはこち…

JUnit5 で BDD

JUnit5のinner classを利用したBDD記法のサンプルです。 検証環境 software version OS MacOS Mojave Spring Boot 2.2.0.M4 Java Corretto-11.0.4.11.1 Kotlin 1.3.41 JUnit5 5.5.1

protobufをHTTP通信する

protocol bufferは通常gRPCで利用しますが、API定義をprotoファイルで行い 通信自体はHTTPで行いたい、というケースが実務でありましたので方法を記載します。 検証環境 software version OS MacOS Mojave Spring Boot 2.1.5 Java 1.8.0_192-b12 Kotlin 1.3.…

Spring Boot × MyBatis × HikariCPで複数データソースを動的 (透過的) に利用する方法

前置き 以前、静的な方法で複数データソースを利用する方法を記事にしました。 今回は透過的に複数データソースを利用する方法について記述します。 透過的とは、リクエスト時のユーザ情報とか、アクセス時間とか、何らかのパラメータを元にアクセスするデー…

Spring Boot2 × MyBatis × HikariCPで複数データソースにアクセスするコードを実装する 静的バージョン

前置き MyBatisを利用した複数データソースの実装には データソースごとのmapperをpackageレベルで分割する静的な手法と、SpringのAbstractRoutingDataSource を使って都度利用するデータソースを決定する動的な手法があります。今回は静的な手法のコードを…

Spring Boot2 × Kotlin × Gradle5でレイヤーアーキテクチャのアプリケーションを構築する

要旨 Gradleマルチプロジェクトの勉強用です。Spring Boot2, Kotlin, Gradleを使ったシンプルなレイヤーアーキのサンプルです。 クリーンアーキテクチャの記事はこちら ソフトウェアバージョン software version OS MacOS Mojave Spring Boot 2.1.5 Java 1.8…