Kotlin
なんてアホな子なのだ! 調べた 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 BootでRest APIを作る際、Spring MVCならNoHandlerFoundExceptionがあるため、設定していないURLにRequestが来た場合のハンドリングは ExceptionHandlerで簡単に実装できる。 @RestControllerAdvice class ErrorAdvice { @ExceptionHandler(valu…
検索してもAWSのサンプルコード以外にヒットしないので需要があるのかわからないけどコードを書いたので記事にします。 localstack で確認していますが、AWSでは動かしていません テスト環境 Library Version Kotlin 1.4.21 Spring Boot 2.4.2 AWS SDK for …
WebFluxのサンプルをネットで探すとAPIの例しか見つからなくて、俺はHTML出力したいんだよ!って思ったので自分で書きました。 Data Drivenは試していない Controller Spring MVC風のやつ。Rendering を返す。Kotlinならsuspend functionにするだけでReacti…
Spring Boot 2.4になって、application.ymlの書き方がちょっと変わったのでメモ。色々便利になったようなのですが、k8sとか使っていないのであんまり恩恵がない 基本設定をapplication-base.ymlに記述し、環境ごとの差異をそれぞれのapplication-xxx.ymlに…
仕事で使うことになったので勉強しました 前回の記事 に適用します。 point ktlintはdetekt-formattingを利用する。そのためにmaven kotlinx repositoryを追加する multi moduleすべてを見るようにinput files を設定する checkでdetektも走るようにする bu…
Clean Architecture (Multi Module Project) のSpring BootでgRPCを使えるようにします。 仕事で使いそうなので勉強しました。本当はGoで作りたかったけど、誰も賛同してくれなかった。人望/Zero 😉
現時点で考えたさいきょうのJib設定をメモしておきます。1週間の勉強での結論なのですぐに変わりそうですが コード内の、どうすっかなーみたいなコメントでお察しください。 Jibの記事は一旦これで終了にする予定です。 いままでの記事と同じく、multi-pro…
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…
Spring Boot ApplicationをDocker image化する手段として Cloud Native Build Pack Jib jdeps && jlinkで軽量なDocker imageを作る etc... 等があります。(あります、とか大上段からものを言っていますが、ここ1週間くらいで仕入れた知識です。私はクソ雑魚…
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で自作ライブラリを1から作ったことがなかったので試してみました。 作成するライブラリ 文字列を引数で与えるとPrefixをつけて返してくれるMyTextDecoratorを作成します。 さらにadditionalを定義することで追加で文字列を付けてくれます。 gith…
記事の概略 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 (Spring 5.2.1) から、WebClientで256KBを超えるJsonを扱うと DataBufferLimitException が発生するようになりました。Spring 5.1.11 以降でも発生すると思います。 (こっちは自分で試していません) issueはこちら になります。詳細は公式…
Thymeleaf HTMLを用意するためにThymeleafを入れます。そこからかよって感じですが、過去にフロントエンド開発をしたときに使っていたフレームワークがCatalyst (Perl製のフレームワーク) で、Thymeleaf経験すら皆無なのでやむなし。 Presenter 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>…
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からkotlin-dslに移行します。 build.gradle.ktsにすることでスクリプト内でKotlinを使えるようになるし、IntelliJの補完が賢くなるし、groovyの文法をいちいちググらなくてよくなります。Spring Initializrでのデ…
以前記事にしたプロジェクトをbuild.gradleからkotlin-dslに移行します。プロジェクト構成などについてはそちらを参照ください。 Spring Boot 2.2.0のリリースに伴いコードを書き直しました (最終更新: 2019/11/14) ※ リンクの記事はspring-data-r2dbc など…
問題: 生徒オブジェクトのリストがあり、性別ごとの所持金額を集計する 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…
問題: 生徒オブジェクトのリストがあり、クラスごとの人数を集計する 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 Fest 2019 での Kotlinコルーチンを理解しよう 2019 が素晴らしかったので、忘れないうちに復習することにします。 サンプルプログラムは前回記事にしたクリーンアーキテクチャのコードを利用しています。
build.gradleまで書いた前回記事の続きです。Apiをcallした体のプログラムを記述します。
要旨 Gradleの勉強。クリーンアーキテクチャを実装してみます。 この記事ではgradleについて記述します。実際のコードについては次回記事を参照ください。 元ネタはSpring IO 2019で紹介されていたこちら 以前書いたレイヤーアーキテクチャのサンプルはこち…
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
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.…
前置き 以前、静的な方法で複数データソースを利用する方法を記事にしました。 今回は透過的に複数データソースを利用する方法について記述します。 透過的とは、リクエスト時のユーザ情報とか、アクセス時間とか、何らかのパラメータを元にアクセスするデー…
前置き MyBatisを利用した複数データソースの実装には データソースごとのmapperをpackageレベルで分割する静的な手法と、SpringのAbstractRoutingDataSource を使って都度利用するデータソースを決定する動的な手法があります。今回は静的な手法のコードを…
要旨 Gradleマルチプロジェクトの勉強用です。Spring Boot2, Kotlin, Gradleを使ったシンプルなレイヤーアーキのサンプルです。 クリーンアーキテクチャの記事はこちら ソフトウェアバージョン software version OS MacOS Mojave Spring Boot 2.1.5 Java 1.8…